// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "third_party/blink/renderer/core/html/html_embed_element.h"

#include <memory>
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/html/html_object_element.h"
#include "third_party/blink/renderer/core/style/computed_style.h"
#include "third_party/blink/renderer/core/testing/page_test_base.h"

namespace blink {

class HTMLEmbedElementTest : public PageTestBase {};

TEST_F(HTMLEmbedElementTest, FallbackState) {
  // Load <object> element with a <embed> child.
  // This can be seen on sites with Flash cookies,
  // for example on www.yandex.ru
  SetHtmlInnerHTML(R"HTML(
    <div>
    <object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' width='1'
    height='1' id='fco'>
    <param name='movie' value='//site.com/flash-cookie.swf'>
    <param name='allowScriptAccess' value='Always'>
    <embed src='//site.com/flash-cookie.swf' allowscriptaccess='Always'
    width='1' height='1' id='fce'>
    </object></div>
  )HTML");

  auto* object_element = GetElementById("fco");
  ASSERT_TRUE(object_element);
  auto* object = To<HTMLObjectElement>(object_element);

  // At this moment updatePlugin() function is not called, so
  // useFallbackContent() will return false.
  // But the element will likely to use fallback content after updatePlugin().
  EXPECT_TRUE(object->HasFallbackContent());
  EXPECT_FALSE(object->UseFallbackContent());
  EXPECT_TRUE(object->WillUseFallbackContentAtLayout());

  auto* embed_element = GetElementById("fce");
  ASSERT_TRUE(embed_element);
  auto* embed = To<HTMLEmbedElement>(embed_element);

  UpdateAllLifecyclePhasesForTest();

  // We should get |true| as a result and don't trigger a DCHECK.
  EXPECT_TRUE(static_cast<Element*>(embed)->LayoutObjectIsNeeded(
      ComputedStyle::InitialStyle()));

  // This call will update fallback state of the object.
  object->UpdatePlugin();

  EXPECT_TRUE(object->HasFallbackContent());
  EXPECT_TRUE(object->UseFallbackContent());
  EXPECT_TRUE(object->WillUseFallbackContentAtLayout());

  UpdateAllLifecyclePhasesForTest();
  EXPECT_TRUE(static_cast<Element*>(embed)->LayoutObjectIsNeeded(
      ComputedStyle::InitialStyle()));
}

}  // namespace blink
