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

Side by Side Diff: third_party/WebKit/Source/web/tests/WebFrameTest.cpp

Issue 1836973003: Move download messages from Renderer to Frame filter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 #include "platform/UserGestureIndicator.h" 83 #include "platform/UserGestureIndicator.h"
84 #include "platform/geometry/FloatRect.h" 84 #include "platform/geometry/FloatRect.h"
85 #include "platform/network/ResourceError.h" 85 #include "platform/network/ResourceError.h"
86 #include "platform/scroll/ScrollbarTheme.h" 86 #include "platform/scroll/ScrollbarTheme.h"
87 #include "platform/testing/URLTestHelpers.h" 87 #include "platform/testing/URLTestHelpers.h"
88 #include "platform/testing/UnitTestHelpers.h" 88 #include "platform/testing/UnitTestHelpers.h"
89 #include "platform/weborigin/SchemeRegistry.h" 89 #include "platform/weborigin/SchemeRegistry.h"
90 #include "platform/weborigin/SecurityOrigin.h" 90 #include "platform/weborigin/SecurityOrigin.h"
91 #include "public/platform/Platform.h" 91 #include "public/platform/Platform.h"
92 #include "public/platform/WebCachePolicy.h" 92 #include "public/platform/WebCachePolicy.h"
93 #include "public/platform/WebClipboard.h"
93 #include "public/platform/WebFloatRect.h" 94 #include "public/platform/WebFloatRect.h"
95 #include "public/platform/WebMockClipboard.h"
94 #include "public/platform/WebSecurityOrigin.h" 96 #include "public/platform/WebSecurityOrigin.h"
95 #include "public/platform/WebThread.h" 97 #include "public/platform/WebThread.h"
96 #include "public/platform/WebURL.h" 98 #include "public/platform/WebURL.h"
97 #include "public/platform/WebURLLoaderMockFactory.h" 99 #include "public/platform/WebURLLoaderMockFactory.h"
98 #include "public/platform/WebURLResponse.h" 100 #include "public/platform/WebURLResponse.h"
99 #include "public/web/WebCache.h" 101 #include "public/web/WebCache.h"
100 #include "public/web/WebConsoleMessage.h" 102 #include "public/web/WebConsoleMessage.h"
101 #include "public/web/WebDataSource.h" 103 #include "public/web/WebDataSource.h"
102 #include "public/web/WebDeviceEmulationParams.h" 104 #include "public/web/WebDeviceEmulationParams.h"
103 #include "public/web/WebDocument.h" 105 #include "public/web/WebDocument.h"
(...skipping 8558 matching lines...) Expand 10 before | Expand all | Expand 10 after
8662 8664
8663 WebLocalFrame* mainFrame = helper.webView()->mainFrame()->toWebLocalFrame(); 8665 WebLocalFrame* mainFrame = helper.webView()->mainFrame()->toWebLocalFrame();
8664 v8::HandleScope scope(v8::Isolate::GetCurrent()); 8666 v8::HandleScope scope(v8::Isolate::GetCurrent());
8665 mainFrame->executeScript(WebScriptSource("hello = 'world';")); 8667 mainFrame->executeScript(WebScriptSource("hello = 'world';"));
8666 FrameTestHelpers::loadFrame(mainFrame, "data:text/html,new page"); 8668 FrameTestHelpers::loadFrame(mainFrame, "data:text/html,new page");
8667 v8::Local<v8::Value> result = mainFrame->executeScriptAndReturnValue(WebScri ptSource("hello")); 8669 v8::Local<v8::Value> result = mainFrame->executeScriptAndReturnValue(WebScri ptSource("hello"));
8668 ASSERT_TRUE(result->IsString()); 8670 ASSERT_TRUE(result->IsString());
8669 EXPECT_EQ("world", toCoreString(result->ToString(mainFrame->mainWorldScriptC ontext()).ToLocalChecked())); 8671 EXPECT_EQ("world", toCoreString(result->ToString(mainFrame->mainWorldScriptC ontext()).ToLocalChecked()));
8670 } 8672 }
8671 8673
8674 static void setSecurityOrigin(WebFrame* frame, PassRefPtr<SecurityOrigin> securi tyOrigin)
dcheng 2016/06/12 05:58:34 Lines 8674 through 8731 look like they're from cod
8675 {
8676 Document* document = frame->document();
8677 document->setSecurityOrigin(securityOrigin);
8678 }
8679
8680 TEST_F(WebFrameTest, CanHaveSecureChild)
8681 {
8682 FrameTestHelpers::WebViewHelper helper;
8683 FrameTestHelpers::TestWebFrameClient client;
8684 helper.initialize(true, &client, nullptr, nullptr);
8685 WebFrame* mainFrame = helper.webView()->mainFrame();
8686 RefPtr<SecurityOrigin> secureOrigin = SecurityOrigin::createFromString("http s://example.com");
8687 RefPtr<SecurityOrigin> insecureOrigin = SecurityOrigin::createFromString("ht tp://example.com");
8688
8689 // Secure frame.
8690 setSecurityOrigin(mainFrame, secureOrigin);
8691 ASSERT_TRUE(mainFrame->canHaveSecureChild());
8692
8693 // Insecure frame.
8694 setSecurityOrigin(mainFrame, insecureOrigin);
8695 ASSERT_FALSE(mainFrame->canHaveSecureChild());
8696
8697 // Create a chain of frames.
8698 FrameTestHelpers::loadFrame(mainFrame, "data:text/html,<iframe></iframe>");
8699 WebFrame* childFrame = mainFrame->firstChild();
8700 FrameTestHelpers::loadFrame(childFrame, "data:text/html,<iframe></iframe>");
8701 WebFrame* grandchildFrame = childFrame->firstChild();
8702
8703 // Secure -> insecure -> secure frame.
8704 setSecurityOrigin(mainFrame, secureOrigin);
8705 setSecurityOrigin(childFrame, insecureOrigin);
8706 setSecurityOrigin(grandchildFrame, secureOrigin);
8707 ASSERT_TRUE(mainFrame->canHaveSecureChild());
8708 ASSERT_FALSE(childFrame->canHaveSecureChild());
8709 ASSERT_FALSE(grandchildFrame->canHaveSecureChild());
8710
8711 // A document in an insecure context can be considered secure if it has a
8712 // scheme that bypasses the secure context check. But the exception doesn't
8713 // apply to children of that document's frame.
8714 SchemeRegistry::registerURLSchemeBypassingSecureContextCheck("very-special-s cheme");
8715 SchemeRegistry::registerURLSchemeAsSecure("very-special-scheme");
8716 RefPtr<SecurityOrigin> specialOrigin = SecurityOrigin::createFromString("ver y-special-scheme://example.com");
8717
8718 setSecurityOrigin(mainFrame, insecureOrigin);
8719 setSecurityOrigin(childFrame, specialOrigin);
8720 setSecurityOrigin(grandchildFrame, secureOrigin);
8721 ASSERT_FALSE(mainFrame->canHaveSecureChild());
8722 ASSERT_FALSE(childFrame->canHaveSecureChild());
8723 ASSERT_FALSE(grandchildFrame->canHaveSecureChild());
8724 Document* mainDocument = mainFrame->document();
8725 Document* childDocument = childFrame->document();
8726 Document* grandchildDocument = grandchildFrame->document();
8727 ASSERT_FALSE(mainDocument->isSecureContext());
8728 ASSERT_TRUE(childDocument->isSecureContext());
8729 ASSERT_FALSE(grandchildDocument->isSecureContext());
8730 }
8731
8732 class SaveImageFromDataURLWebFrameClient : public FrameTestHelpers::TestWebFrame Client {
8733 public:
8734 // WebFrameClient methods
8735 void saveImageFromDataURL(const WebString& dataURL) override { m_dataURL = d ataURL; }
8736
8737 // Local methods
8738 const WebString& result() const { return m_dataURL; }
8739 void reset() { m_dataURL = WebString(); }
8740
8741 private:
8742 WebString m_dataURL;
8743 };
8744
8745 TEST_F(WebFrameTest, SaveImageAt)
8746 {
8747 std::string url = m_baseURL + "image-with-data-url.html";
8748 URLTestHelpers::registerMockedURLLoad(toKURL(url), "image-with-data-url.html ");
8749 URLTestHelpers::registerMockedURLLoad(toKURL("http://test"), "white-1x1.png" );
8750
8751 FrameTestHelpers::WebViewHelper helper;
8752 SaveImageFromDataURLWebFrameClient client;
8753 WebViewImpl* webView = helper.initializeAndLoad(url, true, &client);
8754 webView->resize(WebSize(400, 400));
8755 webView->updateAllLifecyclePhases();
8756
8757 WebLocalFrame* localFrame = webView->mainFrame()->toWebLocalFrame();
8758
8759 client.reset();
8760 localFrame->saveImageAt(WebPoint(1, 1));
8761 EXPECT_EQ(WebString::fromUTF8("data:image/gif;base64"
8762 ",R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), client.result());
8763
8764 client.reset();
8765 localFrame->saveImageAt(WebPoint(1, 2));
8766 EXPECT_EQ(WebString(), client.result());
8767
8768 webView->setPageScaleFactor(4);
8769 webView->setVisualViewportOffset(WebFloatPoint(1, 1));
8770
8771 client.reset();
8772 localFrame->saveImageAt(WebPoint(3, 3));
8773 EXPECT_EQ(WebString::fromUTF8("data:image/gif;base64"
8774 ",R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), client.result());
8775
8776 helper.reset(); // Explicitly reset to break dependency on locally scoped cl ient.
8777 }
8778
8779 TEST_F(WebFrameTest, SaveImageWithImageMap)
8780 {
8781 std::string url = m_baseURL + "image-map.html";
8782 URLTestHelpers::registerMockedURLLoad(toKURL(url), "image-map.html");
8783
8784 FrameTestHelpers::WebViewHelper helper;
8785 SaveImageFromDataURLWebFrameClient client;
8786 WebView* webView = helper.initializeAndLoad(url, true, &client);
8787 webView->resize(WebSize(400, 400));
8788
8789 WebLocalFrame* localFrame = webView->mainFrame()->toWebLocalFrame();
8790
8791 client.reset();
8792 localFrame->saveImageAt(WebPoint(25, 25));
8793 EXPECT_EQ(WebString::fromUTF8("data:image/gif;base64"
8794 ",R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), client.result());
8795
8796 client.reset();
8797 localFrame->saveImageAt(WebPoint(75, 25));
8798 EXPECT_EQ(WebString::fromUTF8("data:image/gif;base64"
8799 ",R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), client.result());
8800
8801 client.reset();
8802 localFrame->saveImageAt(WebPoint(125, 25));
8803 EXPECT_EQ(WebString(), client.result());
8804
8805 helper.reset(); // Explicitly reset to break dependency on locally scoped cl ient.
8806 }
8807
8808 TEST_F(WebFrameTest, CopyImageAt)
8809 {
8810 std::string url = m_baseURL + "canvas-copy-image.html";
8811 URLTestHelpers::registerMockedURLLoad(toKURL(url), "canvas-copy-image.html") ;
8812
8813 FrameTestHelpers::WebViewHelper helper;
8814 WebView* webView = helper.initializeAndLoad(url, true, 0);
8815 webView->resize(WebSize(400, 400));
8816
8817 uint64_t sequence = Platform::current()->clipboard()->sequenceNumber(WebClip board::BufferStandard);
8818
8819 WebLocalFrame* localFrame = webView->mainFrame()->toWebLocalFrame();
8820 localFrame->copyImageAt(WebPoint(50, 50));
8821
8822 EXPECT_NE(sequence, Platform::current()->clipboard()->sequenceNumber(WebClip board::BufferStandard));
8823
8824 WebImage image = static_cast<WebMockClipboard*>(Platform::current()->clipboa rd())->readRawImage(WebClipboard::Buffer());
8825
8826 SkAutoLockPixels autoLock(image.getSkBitmap());
8827 EXPECT_EQ(SkColorSetARGB(255, 255, 0, 0), image.getSkBitmap().getColor(0, 0) );
8828 };
8829
8830 TEST_F(WebFrameTest, CopyImageAtWithPinchZoom)
8831 {
8832 std::string url = m_baseURL + "canvas-copy-image.html";
8833 URLTestHelpers::registerMockedURLLoad(toKURL(url), "canvas-copy-image.html") ;
8834
8835 FrameTestHelpers::WebViewHelper helper;
8836 WebViewImpl* webView = helper.initializeAndLoad(url, true, 0);
8837 webView->resize(WebSize(400, 400));
8838 webView->updateAllLifecyclePhases();
8839 webView->setPageScaleFactor(2);
8840 webView->setVisualViewportOffset(WebFloatPoint(200, 200));
8841
8842 uint64_t sequence = Platform::current()->clipboard()->sequenceNumber(WebClip board::BufferStandard);
8843
8844 WebLocalFrame* localFrame = webView->mainFrame()->toWebLocalFrame();
8845 localFrame->copyImageAt(WebPoint(0, 0));
8846
8847 EXPECT_NE(sequence, Platform::current()->clipboard()->sequenceNumber(WebClip board::BufferStandard));
8848
8849 WebImage image = static_cast<WebMockClipboard*>(Platform::current()->clipboa rd())->readRawImage(WebClipboard::Buffer());
8850
8851 SkAutoLockPixels autoLock(image.getSkBitmap());
8852 EXPECT_EQ(SkColorSetARGB(255, 255, 0, 0), image.getSkBitmap().getColor(0, 0) );
8853 };
8854
8855 TEST_F(WebFrameTest, CopyImageWithImageMap)
8856 {
8857 SaveImageFromDataURLWebFrameClient client;
8858
8859 std::string url = m_baseURL + "image-map.html";
8860 URLTestHelpers::registerMockedURLLoad(toKURL(url), "image-map.html");
8861
8862 FrameTestHelpers::WebViewHelper helper;
8863 WebView* webView = helper.initializeAndLoad(url, true, &client);
8864 webView->resize(WebSize(400, 400));
8865
8866 client.reset();
8867 WebLocalFrame* localFrame = webView->mainFrame()->toWebLocalFrame();
8868 localFrame->saveImageAt(WebPoint(25, 25));
8869 EXPECT_EQ(WebString::fromUTF8("data:image/gif;base64"
8870 ",R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), client.result());
8871
8872 client.reset();
8873 localFrame->saveImageAt(WebPoint(75, 25));
8874 EXPECT_EQ(WebString::fromUTF8("data:image/gif;base64"
8875 ",R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="), client.result());
8876
8877 client.reset();
8878 localFrame->saveImageAt(WebPoint(125, 25));
8879 EXPECT_EQ(WebString(), client.result());
8880
8881 helper.reset(); // Explicitly reset to break dependency on locally scoped cl ient.
8882 }
8883
8672 } // namespace blink 8884 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698