// Copyright 2019 The Chromium Authors
// 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/svg/svg_foreign_object_element.h"

#include "third_party/blink/renderer/core/css/resolver/style_resolver.h"
#include "third_party/blink/renderer/core/html/html_element.h"
#include "third_party/blink/renderer/core/layout/layout_object.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 SVGForeignObjectElementTest : public PageTestBase {};

TEST_F(SVGForeignObjectElementTest, NoLayoutObjectInNonRendered) {
  GetDocument().body()->setInnerHTML(R"HTML(
    <svg>
      <pattern>
        <foreignObject id="fo"></foreignObject>
      </pattern>
    </svg>
  )HTML");

  UpdateAllLifecyclePhasesForTest();

  Element* foreign_object = GetDocument().getElementById(AtomicString("fo"));
  EXPECT_FALSE(foreign_object->GetLayoutObject());

  const ComputedStyle& style = GetDocument().GetStyleResolver().InitialStyle();
  LayoutObject* layout_object = foreign_object->CreateLayoutObject(style);
  EXPECT_FALSE(layout_object);
}

TEST_F(SVGForeignObjectElementTest, ReferenceForeignObjectInNonRenderedCrash) {
  GetDocument().body()->setInnerHTML(R"HTML(
    <style>
      div { writing-mode: vertical-rl; }
      div > svg { float: right; }
    </style>
    <svg>
      <radialGradient id="gradient">
        <pattern>
          <foreignObject>
            <div id="foRoot">
              <svg><rect fill="url(#gradient)" /></svg>
            </div>
          </foreignObject>
        </pattern>
      </radialGradient>
    </svg>
  )HTML");

  // This should not trigger any DCHECK failures or crashes.
  UpdateAllLifecyclePhasesForTest();
}

}  // namespace blink
