| Index: Source/web/tests/WebFrameTest.cpp
|
| diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp
|
| index fafd0d5db2c255fb4a393f45f9568219801701c2..ca41c956a3022dfd0888293a101abff91e6af1d9 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/WebSelectionBound.h"
|
| @@ -5864,4 +5869,49 @@ TEST_F(WebFrameSwapTest, SwapLastChild)
|
| remoteFrame->close();
|
| }
|
|
|
| +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
|
| +// 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
|
|
|