Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Side by Side Diff: third_party/WebKit/Source/core/dom/DocumentTest.cpp

Issue 2782093003: Merge "Form validation: Validation bubble should be closed on document unload process." to M58 (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014, Google Inc. All rights reserved. 2 * Copyright (c) 2014, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 16 matching lines...) Expand all
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "core/dom/Document.h" 31 #include "core/dom/Document.h"
32 32
33 #include "core/dom/NodeWithIndex.h" 33 #include "core/dom/NodeWithIndex.h"
34 #include "core/dom/SynchronousMutationObserver.h" 34 #include "core/dom/SynchronousMutationObserver.h"
35 #include "core/dom/Text.h" 35 #include "core/dom/Text.h"
36 #include "core/frame/FrameView.h" 36 #include "core/frame/FrameView.h"
37 #include "core/frame/Settings.h"
37 #include "core/html/HTMLHeadElement.h" 38 #include "core/html/HTMLHeadElement.h"
39 #include "core/html/HTMLInputElement.h"
38 #include "core/html/HTMLLinkElement.h" 40 #include "core/html/HTMLLinkElement.h"
41 #include "core/page/Page.h"
42 #include "core/page/ValidationMessageClient.h"
39 #include "core/testing/DummyPageHolder.h" 43 #include "core/testing/DummyPageHolder.h"
40 #include "platform/heap/Handle.h" 44 #include "platform/heap/Handle.h"
41 #include "platform/weborigin/ReferrerPolicy.h" 45 #include "platform/weborigin/ReferrerPolicy.h"
42 #include "platform/weborigin/SchemeRegistry.h" 46 #include "platform/weborigin/SchemeRegistry.h"
43 #include "platform/weborigin/SecurityOrigin.h" 47 #include "platform/weborigin/SecurityOrigin.h"
44 #include "testing/gmock/include/gmock/gmock.h" 48 #include "testing/gmock/include/gmock/gmock.h"
45 #include "testing/gtest/include/gtest/gtest.h" 49 #include "testing/gtest/include/gtest/gtest.h"
46 #include <memory> 50 #include <memory>
47 51
48 namespace blink { 52 namespace blink {
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 visitor->trace(m_childrenChangedNodes); 238 visitor->trace(m_childrenChangedNodes);
235 visitor->trace(m_mergeTextNodesRecords); 239 visitor->trace(m_mergeTextNodesRecords);
236 visitor->trace(m_moveTreeToNewDocumentNodes); 240 visitor->trace(m_moveTreeToNewDocumentNodes);
237 visitor->trace(m_removedChildrenNodes); 241 visitor->trace(m_removedChildrenNodes);
238 visitor->trace(m_removedNodes); 242 visitor->trace(m_removedNodes);
239 visitor->trace(m_splitTextNodes); 243 visitor->trace(m_splitTextNodes);
240 visitor->trace(m_updatedCharacterDataRecords); 244 visitor->trace(m_updatedCharacterDataRecords);
241 SynchronousMutationObserver::trace(visitor); 245 SynchronousMutationObserver::trace(visitor);
242 } 246 }
243 247
248 class MockValidationMessageClient
249 : public GarbageCollectedFinalized<MockValidationMessageClient>,
250 public ValidationMessageClient {
251 USING_GARBAGE_COLLECTED_MIXIN(MockValidationMessageClient);
252
253 public:
254 MockValidationMessageClient() { reset(); }
255 void reset() {
256 showValidationMessageWasCalled = false;
257 willUnloadDocumentWasCalled = false;
258 documentDetachedWasCalled = false;
259 }
260 bool showValidationMessageWasCalled;
261 bool willUnloadDocumentWasCalled;
262 bool documentDetachedWasCalled;
263
264 // ValidationMessageClient functions.
265 void showValidationMessage(const Element& anchor,
266 const String& mainMessage,
267 TextDirection,
268 const String& subMessage,
269 TextDirection) override {
270 showValidationMessageWasCalled = true;
271 }
272 void hideValidationMessage(const Element& anchor) override {}
273 bool isValidationMessageVisible(const Element& anchor) override {
274 return true;
275 }
276 void willUnloadDocument(const Document&) override {
277 willUnloadDocumentWasCalled = true;
278 }
279 void documentDetached(const Document&) override {
280 documentDetachedWasCalled = true;
281 }
282 void willBeDestroyed() override {}
283
284 // DEFINE_INLINE_VIRTUAL_TRACE() { ValidationMessageClient::trace(visitor); }
285 };
286
244 } // anonymous namespace 287 } // anonymous namespace
245 288
246 // This tests that we properly resize and re-layout pages for printing in the 289 // This tests that we properly resize and re-layout pages for printing in the
247 // presence of media queries effecting elements in a subtree layout boundary 290 // presence of media queries effecting elements in a subtree layout boundary
248 TEST_F(DocumentTest, PrintRelayout) { 291 TEST_F(DocumentTest, PrintRelayout) {
249 setHtmlInnerHTML( 292 setHtmlInnerHTML(
250 "<style>" 293 "<style>"
251 " div {" 294 " div {"
252 " width: 100px;" 295 " width: 100px;"
253 " height: 100px;" 296 " height: 100px;"
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 686
644 { 687 {
645 setHtmlInnerHTML( 688 setHtmlInnerHTML(
646 "<body>" 689 "<body>"
647 "<meta name=\"theme-color\" content=\"#00ff00\">"); 690 "<meta name=\"theme-color\" content=\"#00ff00\">");
648 EXPECT_EQ(Color(0, 255, 0), document().themeColor()) 691 EXPECT_EQ(Color(0, 255, 0), document().themeColor())
649 << "Theme color should be bright green."; 692 << "Theme color should be bright green.";
650 } 693 }
651 } 694 }
652 695
696 TEST_F(DocumentTest, ValidationMessageCleanup) {
697 ValidationMessageClient* originalClient = &page().validationMessageClient();
698 MockValidationMessageClient* mockClient = new MockValidationMessageClient();
699 document().settings()->setScriptEnabled(true);
700 page().setValidationMessageClient(mockClient);
701 // implicitOpen()-implicitClose() makes Document.loadEventFinished()
702 // true. It's necessary to kick unload process.
703 document().implicitOpen(ForceSynchronousParsing);
704 document().implicitClose();
705 document().appendChild(document().createElement("html"));
706 setHtmlInnerHTML("<body><input required></body>");
707 Element* script = document().createElement("script");
708 script->setTextContent(
709 "window.onunload = function() {"
710 "document.querySelector('input').reportValidity(); };");
711 document().body()->appendChild(script);
712 HTMLInputElement* input = toHTMLInputElement(document().body()->firstChild());
713 DVLOG(0) << document().body()->outerHTML();
714
715 // Sanity check.
716 input->reportValidity();
717 EXPECT_TRUE(mockClient->showValidationMessageWasCalled);
718 mockClient->reset();
719
720 // prepareForCommit() unloads the document, and shutdown.
721 document().frame()->prepareForCommit();
722 EXPECT_TRUE(mockClient->willUnloadDocumentWasCalled);
723 EXPECT_TRUE(mockClient->documentDetachedWasCalled);
724 // Unload handler tried to show a validation message, but it should fail.
725 EXPECT_FALSE(mockClient->showValidationMessageWasCalled);
726
727 page().setValidationMessageClient(originalClient);
728 }
729
653 } // namespace blink 730 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/Document.cpp ('k') | third_party/WebKit/Source/core/html/HTMLFormControlElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698