Chromium Code Reviews| Index: Source/web/tests/WebFrameTest.cpp |
| diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp |
| index 200f6be42082ca59f0caeb963f995f1e19c90b96..5d77fab91dc4738768754a8ed75ce1149c6e175f 100644 |
| --- a/Source/web/tests/WebFrameTest.cpp |
| +++ b/Source/web/tests/WebFrameTest.cpp |
| @@ -50,8 +50,12 @@ |
| #include "core/frame/FrameView.h" |
| #include "core/frame/LocalFrame.h" |
| #include "core/frame/Settings.h" |
| +#include "core/html/HTMLDocument.h" |
| #include "core/html/HTMLFormElement.h" |
| +#include "core/loader/DocumentThreadableLoader.h" |
| +#include "core/loader/DocumentThreadableLoaderClient.h" |
| #include "core/loader/FrameLoadRequest.h" |
| +#include "core/loader/ThreadableLoader.h" |
| #include "core/page/EventHandler.h" |
| #include "core/page/Page.h" |
| #include "core/rendering/HitTestResult.h" |
| @@ -64,6 +68,7 @@ |
| #include "platform/geometry/FloatRect.h" |
| #include "platform/network/ResourceError.h" |
| #include "platform/scroll/ScrollbarTheme.h" |
| +#include "platform/weborigin/SchemeRegistry.h" |
| #include "public/platform/Platform.h" |
| #include "public/platform/WebFloatRect.h" |
| #include "public/platform/WebThread.h" |
| @@ -5614,4 +5619,49 @@ TEST_F(WebFrameTest, BrandColor) |
| EXPECT_EQ(0xff0000ff, frame->document().brandColor()); |
| } |
| +class MockDocumentThreadableLoaderClient : public WebCore::DocumentThreadableLoaderClient { |
| +public: |
| + MockDocumentThreadableLoaderClient() : m_failed(false) { } |
| + virtual void didFail(const WebCore::ResourceError&) OVERRIDE { m_failed = true;} |
| + |
| + void reset() { m_failed = false; } |
| + bool failed() { return m_failed; } |
| + |
| + bool m_failed; |
| +}; |
| + |
| +// FIXME: This would be better as a unittest on DocumentThreadableLoader but it |
| +// requires spin-up of a frame. It may be possible to remove that requirement |
|
Nate Chapin
2014/07/07 17:24:52
FWIW, this is a nearly universal problem with anyt
|
| +// and convert it to a unittest. |
| +TEST_F(WebFrameTest, LoaderOriginAccess) |
| +{ |
| + FrameTestHelpers::WebViewHelper webViewHelper; |
| + webViewHelper.initializeAndLoad("about:blank"); |
| + |
| + WebCore::SchemeRegistry::registerURLSchemeAsDisplayIsolated("chrome"); |
| + |
| + // Cross-origin request. |
| + WebCore::KURL resourceUrl(WebCore::ParsedURLString, "chrome://test.pdf"); |
| + registerMockedChromeURLLoad("test.pdf"); |
| + |
| + RefPtr<WebCore::LocalFrame> frame = toLocalFrame(webViewHelper.webViewImpl()->page()->mainFrame()); |
| + |
| + MockDocumentThreadableLoaderClient client; |
| + WebCore::ThreadableLoaderOptions options; |
| + |
| + // First try to load the request with regular access. Should fail. |
| + options.crossOriginRequestPolicy = WebCore::UseAccessControl; |
| + WebCore::ResourceLoaderOptions resourceLoaderOptions; |
| + WebCore::DocumentThreadableLoader::loadResourceSynchronously( |
| + *frame->document(), WebCore::ResourceRequest(resourceUrl), client, options, resourceLoaderOptions); |
| + EXPECT_TRUE(client.failed()); |
| + |
| + client.reset(); |
| + // Try to load the request with cross origin access. Should succeed. |
| + options.crossOriginRequestPolicy = WebCore::AllowCrossOriginRequests; |
| + WebCore::DocumentThreadableLoader::loadResourceSynchronously( |
| + *frame->document(), WebCore::ResourceRequest(resourceUrl), client, options, resourceLoaderOptions); |
| + EXPECT_FALSE(client.failed()); |
| +} |
| + |
| } // namespace |