Diff
Modified: branches/safari-601.1-branch/LayoutTests/ChangeLog (188075 => 188076)
--- branches/safari-601.1-branch/LayoutTests/ChangeLog 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/LayoutTests/ChangeLog 2015-08-06 23:09:38 UTC (rev 188076)
@@ -1,5 +1,24 @@
2015-08-06 Dana Burkart <dburk...@apple.com>
+ Merge r187886. rdar://problem/15779101
+
+ 2015-08-04 Alexey Proskuryakov <a...@apple.com>
+
+ Implement NPAPI redirect handling
+ https://bugs.webkit.org/show_bug.cgi?id=138675
+ rdar://problem/15779101
+
+ Patch by Jeffrey Pfau, updated and tweaked by me.
+
+ Reviewed by Anders Carlsson.
+
+ * http/tests/plugins/get-url-redirect-notify-expected.txt: Added.
+ * http/tests/plugins/get-url-redirect-notify.html: Added.
+ * platform/wk2/http/tests/plugins: Added.
+ * platform/wk2/http/tests/plugins/get-url-redirect-notify-expected.txt: Added.
+
+2015-08-06 Dana Burkart <dburk...@apple.com>
+
Merge r187620. rdar://problem/15779101
2015-07-30 Anders Carlsson <ander...@apple.com>
Added: branches/safari-601.1-branch/LayoutTests/http/tests/plugins/get-url-redirect-notify-expected.txt (0 => 188076)
--- branches/safari-601.1-branch/LayoutTests/http/tests/plugins/get-url-redirect-notify-expected.txt (rev 0)
+++ branches/safari-601.1-branch/LayoutTests/http/tests/plugins/get-url-redirect-notify-expected.txt 2015-08-06 23:09:38 UTC (rev 188076)
@@ -0,0 +1,13 @@
+
+Sync allow, reason shouldn't be NPRES_USER_BREAK...true
+Sync allow, URL should be the final URL...false
+Sync deny, reason should be NPRES_USER_BREAK...false
+Sync deny, URL should be the previous URL...true
+Async allow, reason shouldn't be NPRES_USER_BREAK...true
+Async allow, URL should be the final URL...false
+Async deny, reason should be NPRES_USER_BREAK...false
+Async deny, URL should be the previous URL...true
+Async multiple allow, reason shouldn't be NPRES_USER_BREAK...true
+Async multiple allow, URL should be the final URL...false
+Async multiple deny, reason should be NPRES_USER_BREAK...false
+Async multiple deny, URL should be the previous URL...false
Added: branches/safari-601.1-branch/LayoutTests/http/tests/plugins/get-url-redirect-notify.html (0 => 188076)
--- branches/safari-601.1-branch/LayoutTests/http/tests/plugins/get-url-redirect-notify.html (rev 0)
+++ branches/safari-601.1-branch/LayoutTests/http/tests/plugins/get-url-redirect-notify.html 2015-08-06 23:09:38 UTC (rev 188076)
@@ -0,0 +1,89 @@
+<html>
+<body>
+<embed name="plg" type="application/x-webkit-test-netscape" test="url-redirect"></embed>
+<div id="log">
+ <div id="syncallowreason">Sync allow, reason shouldn't be NPRES_USER_BREAK...</div>
+ <div id="syncallowurl">Sync allow, URL should be the final URL...</div>
+ <div id="syncdenyreason">Sync deny, reason should be NPRES_USER_BREAK...</div>
+ <div id="syncdenyurl">Sync deny, URL should be the previous URL...</div>
+ <div id="asyncallowreason">Async allow, reason shouldn't be NPRES_USER_BREAK...</div>
+ <div id="asyncallowurl">Async allow, URL should be the final URL...</div>
+ <div id="asyncdenyreason">Async deny, reason should be NPRES_USER_BREAK...</div>
+ <div id="asyncdenyurl">Async deny, URL should be the previous URL...</div>
+ <div id="asyncmultiallowreason">Async multiple allow, reason shouldn't be NPRES_USER_BREAK...</div>
+ <div id="asyncmultiallowurl">Async multiple allow, URL should be the final URL...</div>
+ <div id="asyncmultidenyreason">Async multiple deny, reason should be NPRES_USER_BREAK...</div>
+ <div id="asyncmultidenyurl">Async multiple deny, URL should be the previous URL...</div>
+</div>
+<script>
+ function log(node, message)
+ {
+ text = document.getElementById(node);
+ text.innerText += message;
+ }
+ function cleanup()
+ {
+ --testsRemaining;
+ if (!testsRemaining) {
+ clearInterval(timer);
+ if (window.testRunner)
+ testRunner.notifyDone();
+ }
+ }
+ function notifyTrue(reason, url)
+ {
+ log("syncallowreason", reason != 2);
+ log("syncallowurl", url == redirectURL);
+ cleanup();
+ }
+ function notifyFalse(reason, url)
+ {
+ log("syncdenyreason", reason == 2);
+ log("syncdenyurl", url == singleRedirect);
+ cleanup();
+ }
+ function notifyTrueAsync(reason, url)
+ {
+ log("asyncallowreason", reason != 2);
+ log("asyncallowurl", url == redirectURL);
+ cleanup();
+ }
+ function notifyFalseAsync(reason, url)
+ {
+ log("asyncdenyreason", reason == 2);
+ log("asyncdenyurl", url == singleRedirect);
+ cleanup();
+ }
+ function notifyMultiTrueAsync(reason, url)
+ {
+ log("asyncmultiallowreason", reason != 2);
+ log("asyncmultiallowurl", url == redirectURL);
+ cleanup();
+ }
+ function notifyMultiFalseAsync(reason, url)
+ {
+ log("asyncmultidenyreason", reason == 2);
+ log("asyncmultidenyurl", url == singleRedirect);
+ cleanup();
+ }
+
+ if (window.testRunner) {
+ testRunner.dumpAsText();
+ testRunner.waitUntilDone();
+ }
+
+ var baseURL = "http://127.0.0.1:8000/resources/redirect.php";
+ var redirectURL = "http://127.0.0.1:8000/dummy";
+ var singleRedirect = baseURL + "?code=307&url="" + encodeURIComponent(redirectURL);
+ var doubleRedirect = baseURL + "?code=307&url="" + encodeURIComponent(singleRedirect);
+ var testsRemaining = 6;
+ plg.get(singleRedirect, 1, "notifyTrue");
+ plg.get(singleRedirect, 0, "notifyFalse");
+ plg.getAsync(singleRedirect, 1, "notifyTrueAsync");
+ plg.getAsync(singleRedirect, 0, "notifyFalseAsync");
+ plg.getAsync(doubleRedirect, 2, "notifyMultiTrueAsync");
+ plg.getAsync(doubleRedirect, 1, "notifyMultiFalseAsync");
+ var timer = setInterval(function() { plg.serviceAsync() }, 10);
+</script>
+</body>
+</html>
Added: branches/safari-601.1-branch/LayoutTests/platform/wk2/http/tests/plugins/get-url-redirect-notify-expected.txt (0 => 188076)
--- branches/safari-601.1-branch/LayoutTests/platform/wk2/http/tests/plugins/get-url-redirect-notify-expected.txt (rev 0)
+++ branches/safari-601.1-branch/LayoutTests/platform/wk2/http/tests/plugins/get-url-redirect-notify-expected.txt 2015-08-06 23:09:38 UTC (rev 188076)
@@ -0,0 +1,13 @@
+
+Sync allow, reason shouldn't be NPRES_USER_BREAK...true
+Sync allow, URL should be the final URL...true
+Sync deny, reason should be NPRES_USER_BREAK...true
+Sync deny, URL should be the previous URL...true
+Async allow, reason shouldn't be NPRES_USER_BREAK...true
+Async allow, URL should be the final URL...true
+Async deny, reason should be NPRES_USER_BREAK...true
+Async deny, URL should be the previous URL...true
+Async multiple allow, reason shouldn't be NPRES_USER_BREAK...true
+Async multiple allow, URL should be the final URL...true
+Async multiple deny, reason should be NPRES_USER_BREAK...true
+Async multiple deny, URL should be the previous URL...true
Modified: branches/safari-601.1-branch/Source/WebCore/ChangeLog (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebCore/ChangeLog 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebCore/ChangeLog 2015-08-06 23:09:38 UTC (rev 188076)
@@ -1,5 +1,41 @@
2015-08-06 Dana Burkart <dburk...@apple.com>
+ Merge r187886. rdar://problem/15779101
+
+ 2015-08-04 Alexey Proskuryakov <a...@apple.com>
+
+ Implement NPAPI redirect handling
+ https://bugs.webkit.org/show_bug.cgi?id=138675
+ rdar://problem/15779101
+
+ Patch by Jeffrey Pfau, updated and tweaked by me.
+
+ Reviewed by Anders Carlsson.
+
+ Test: http/tests/plugins/get-url-redirect-notify.html
+
+ * loader/NetscapePlugInStreamLoader.cpp:
+ (WebCore::NetscapePlugInStreamLoader::init):
+ (WebCore::NetscapePlugInStreamLoader::willSendRequest):
+ (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
+ * loader/NetscapePlugInStreamLoader.h:
+ * loader/ResourceLoader.cpp:
+ (WebCore::ResourceLoader::init):
+ (WebCore::ResourceLoader::isSubresourceLoader):
+ (WebCore::ResourceLoader::willSendRequestInternal):
+ (WebCore::ResourceLoader::willSendRequest):
+ (WebCore::ResourceLoader::didSendData):
+ * loader/ResourceLoader.h:
+ * loader/SubresourceLoader.cpp:
+ (WebCore::SubresourceLoader::isSubresourceLoader):
+ (WebCore::SubresourceLoader::willSendRequestInternal):
+ (WebCore::SubresourceLoader::willSendRequest): Deleted.
+ * loader/SubresourceLoader.h:
+ * plugins/npapi.h:
+ * plugins/npfunctions.h:
+
+2015-08-06 Dana Burkart <dburk...@apple.com>
+
Merge r187693. rdar://problem/22047626
2015-07-31 Myles C. Maxfield <mmaxfi...@apple.com>
Modified: branches/safari-601.1-branch/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -88,6 +88,18 @@
return true;
}
+void NetscapePlugInStreamLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, std::function<void(ResourceRequest&&)>&& callback)
+{
+ RefPtr<NetscapePlugInStreamLoader> protect(this);
+
+ m_client->willSendRequest(this, WTF::move(request), redirectResponse, [protect, redirectResponse, callback](ResourceRequest request) {
+ if (!request.isNull())
+ protect->willSendRequestInternal(request, redirectResponse);
+
+ callback(WTF::move(request));
+ });
+}
+
void NetscapePlugInStreamLoader::didReceiveResponse(const ResourceResponse& response)
{
Ref<NetscapePlugInStreamLoader> protect(*this);
Modified: branches/safari-601.1-branch/Source/WebCore/loader/NetscapePlugInStreamLoader.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebCore/loader/NetscapePlugInStreamLoader.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebCore/loader/NetscapePlugInStreamLoader.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -38,6 +38,7 @@
class NetscapePlugInStreamLoaderClient {
public:
+ virtual void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, std::function<void (ResourceRequest&&)>&&) = 0;
virtual void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) = 0;
virtual void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) = 0;
virtual void didFail(NetscapePlugInStreamLoader*, const ResourceError&) = 0;
@@ -58,6 +59,7 @@
private:
virtual bool init(const ResourceRequest&) override;
+ virtual void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, std::function<void(ResourceRequest&&)>&& callback) override;
virtual void didReceiveResponse(const ResourceResponse&) override;
virtual void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override;
virtual void didReceiveBuffer(PassRefPtr<SharedBuffer>, long long encodedDataLength, DataPayloadType) override;
Modified: branches/safari-601.1-branch/Source/WebCore/loader/ResourceLoader.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebCore/loader/ResourceLoader.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebCore/loader/ResourceLoader.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -147,7 +147,7 @@
clientRequest.setFirstPartyForCookies(document->firstPartyForCookies());
}
- willSendRequest(clientRequest, ResourceResponse());
+ willSendRequestInternal(clientRequest, ResourceResponse());
#if PLATFORM(IOS)
// If this ResourceLoader was stopped as a result of willSendRequest, bail out.
@@ -286,7 +286,7 @@
return false;
}
-void ResourceLoader::willSendRequest(ResourceRequest& request, const ResourceResponse& redirectResponse)
+void ResourceLoader::willSendRequestInternal(ResourceRequest& request, const ResourceResponse& redirectResponse)
{
// Protect this in this delegate method since the additional processing can do
// anything including possibly derefing this; one example of this is Radar 3266216.
@@ -344,10 +344,10 @@
frameLoader()->client().dispatchDidReceiveServerRedirectForProvisionalLoad();
}
-void ResourceLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, std::function<void(ResourceRequest&)> callback)
+void ResourceLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, std::function<void(ResourceRequest&&)>&& callback)
{
- willSendRequest(request, redirectResponse);
- callback(request);
+ willSendRequestInternal(request, redirectResponse);
+ callback(WTF::move(request));
}
void ResourceLoader::didSendData(unsigned long long, unsigned long long)
@@ -557,7 +557,7 @@
{
if (documentLoader()->applicationCacheHost()->maybeLoadFallbackForRedirect(this, request, redirectResponse))
return;
- willSendRequest(request, redirectResponse);
+ willSendRequestInternal(request, redirectResponse);
}
void ResourceLoader::didSendData(ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
Modified: branches/safari-601.1-branch/Source/WebCore/loader/ResourceLoader.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebCore/loader/ResourceLoader.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebCore/loader/ResourceLoader.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -99,8 +99,7 @@
virtual bool isSubresourceLoader();
- virtual void willSendRequest(ResourceRequest&, const ResourceResponse& redirectResponse);
- virtual void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, std::function<void(ResourceRequest&)> callback);
+ virtual void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, std::function<void(ResourceRequest&&)>&& callback);
virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
virtual void didReceiveResponse(const ResourceResponse&);
virtual void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType);
@@ -170,6 +169,8 @@
virtual CFCachedURLResponseRef willCacheResponse(ResourceHandle*, CFCachedURLResponseRef) override;
#endif
+ virtual void willSendRequestInternal(ResourceRequest&, const ResourceResponse& redirectResponse);
+
RefPtr<ResourceHandle> m_handle;
RefPtr<Frame> m_frame;
RefPtr<DocumentLoader> m_documentLoader;
Modified: branches/safari-601.1-branch/Source/WebCore/loader/SubresourceLoader.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebCore/loader/SubresourceLoader.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebCore/loader/SubresourceLoader.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -152,7 +152,7 @@
return true;
}
-void SubresourceLoader::willSendRequest(ResourceRequest& newRequest, const ResourceResponse& redirectResponse)
+void SubresourceLoader::willSendRequestInternal(ResourceRequest& newRequest, const ResourceResponse& redirectResponse)
{
// Store the previous URL because the call to ResourceLoader::willSendRequest will modify it.
URL previousURL = request().url();
@@ -185,7 +185,7 @@
if (newRequest.isNull() || reachedTerminalState())
return;
- ResourceLoader::willSendRequest(newRequest, redirectResponse);
+ ResourceLoader::willSendRequestInternal(newRequest, redirectResponse);
if (newRequest.isNull())
cancel();
}
Modified: branches/safari-601.1-branch/Source/WebCore/loader/SubresourceLoader.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebCore/loader/SubresourceLoader.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebCore/loader/SubresourceLoader.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -63,7 +63,7 @@
virtual bool init(const ResourceRequest&) override;
- virtual void willSendRequest(ResourceRequest&, const ResourceResponse& redirectResponse) override;
+ virtual void willSendRequestInternal(ResourceRequest&, const ResourceResponse& redirectResponse) override;
virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
virtual void didReceiveResponse(const ResourceResponse&) override;
virtual void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override;
Modified: branches/safari-601.1-branch/Source/WebCore/plugins/npapi.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebCore/plugins/npapi.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebCore/plugins/npapi.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -96,7 +96,7 @@
/*----------------------------------------------------------------------*/
#define NP_VERSION_MAJOR 0
-#define NP_VERSION_MINOR 24
+#define NP_VERSION_MINOR 26
/* The OS/2 version of Netscape uses RC_DATA to define the
@@ -868,6 +868,9 @@
void NP_LOADDS NPN_UnscheduleTimer(NPP instance, uint32_t timerID);
NPError NP_LOADDS NPN_PopUpContextMenu(NPP instance, NPMenu* menu);
NPBool NP_LOADDS NPN_ConvertPoint(NPP instance, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
+NPBool NP_LOADDS NPN_HandleEvent(NPP instance, void *event, NPBool handled);
+NPBool NP_LOADDS NPN_UnfocusInstance(NPP instance, NPFocusDirection direction);
+void NP_LOADDS NPN_URLRedirectResponse(NPP instance, void* notifyData, NPBool allow);
#ifdef __cplusplus
} /* end extern "C" */
Modified: branches/safari-601.1-branch/Source/WebCore/plugins/npfunctions.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebCore/plugins/npfunctions.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebCore/plugins/npfunctions.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -71,6 +71,9 @@
typedef void (*NPN_UnscheduleTimerProcPtr)(NPP npp, uint32_t timerID);
typedef NPError (*NPN_PopUpContextMenuProcPtr)(NPP instance, NPMenu* menu);
typedef NPBool (*NPN_ConvertPointProcPtr)(NPP npp, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
+typedef NPBool (*NPN_HandleEventPtr)(NPP instance, void *event, NPBool handled);
+typedef NPBool (*NPN_UnfocusInstancePtr)(NPP instance, NPFocusDirection direction);
+typedef void (*NPN_URLRedirectResponsePtr)(NPP instance, void* notifyData, NPBool allow);
typedef void (*NPN_ReleaseVariantValueProcPtr) (NPVariant *variant);
@@ -175,6 +178,9 @@
NPN_UnscheduleTimerProcPtr unscheduletimer;
NPN_PopUpContextMenuProcPtr popupcontextmenu;
NPN_ConvertPointProcPtr convertpoint;
+ NPN_HandleEventPtr handleevent;
+ NPN_UnfocusInstancePtr unfocusinstance;
+ NPN_URLRedirectResponsePtr urlredirectresponse;
} NPNetscapeFuncs;
typedef struct _NPPluginFuncs {
Modified: branches/safari-601.1-branch/Source/WebKit/mac/ChangeLog (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit/mac/ChangeLog 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit/mac/ChangeLog 2015-08-06 23:09:38 UTC (rev 188076)
@@ -1,3 +1,29 @@
+2015-08-06 Dana Burkart <dburk...@apple.com>
+
+ Merge r187886. rdar://problem/15779101
+
+ 2015-08-04 Alexey Proskuryakov <a...@apple.com>
+
+ Implement NPAPI redirect handling
+ https://bugs.webkit.org/show_bug.cgi?id=138675
+ rdar://problem/15779101
+
+ Patch by Jeffrey Pfau, updated and tweaked by me.
+
+ Reviewed by Anders Carlsson.
+
+ * Plugins/Hosted/HostedNetscapePluginStream.h:
+ (WebKit::HostedNetscapePluginStream::streamID):
+ * Plugins/Hosted/HostedNetscapePluginStream.mm:
+ (WebKit::HostedNetscapePluginStream::didFinishLoading):
+ (WebKit::HostedNetscapePluginStream::willSendRequest):
+ (WebKit::HostedNetscapePluginStream::didReceiveResponse):
+ * Plugins/WebNetscapePluginStream.h:
+ * Plugins/WebNetscapePluginStream.mm:
+ (WebNetscapePluginStream::stop):
+ (WebNetscapePluginStream::willSendRequest):
+ (WebNetscapePluginStream::didReceiveResponse):
+
2015-08-04 Matthew Hanson <matthew_han...@apple.com>
Merge r187805. rdar://problem/21838271
Modified: branches/safari-601.1-branch/Source/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -61,10 +61,12 @@
uint32_t streamID() const { return m_streamID; }
void startStreamWithResponse(NSURLResponse *response);
- void didReceiveData(WebCore::NetscapePlugInStreamLoader*, const char* bytes, int length);
- void didFinishLoading(WebCore::NetscapePlugInStreamLoader*);
- void didFail(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceError&);
+ // FIXME: Can these be made private?
+ void didReceiveData(WebCore::NetscapePlugInStreamLoader*, const char* bytes, int length) override;
+ void didFinishLoading(WebCore::NetscapePlugInStreamLoader*) override;
+ void didFail(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceError&) override;
+
void start();
void stop();
@@ -84,8 +86,9 @@
NSError *pluginCancelledConnectionError() const;
// NetscapePlugInStreamLoaderClient methods.
- void didReceiveResponse(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceResponse&);
- bool wantsAllStreams() const;
+ void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&&, const WebCore::ResourceResponse& redirectResponse, std::function<void (WebCore::ResourceRequest&&)>&&) override;
+ void didReceiveResponse(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceResponse&) override;
+ bool wantsAllStreams() const override;
RefPtr<NetscapePluginInstanceProxy> m_instance;
uint32_t m_streamID;
Modified: branches/safari-601.1-branch/Source/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm 2015-08-06 23:09:38 UTC (rev 188076)
@@ -128,7 +128,13 @@
m_streamID);
m_instance->disconnectStream(this);
}
-
+
+void HostedNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, std::function<void (WebCore::ResourceRequest&&)>&& callback)
+{
+ // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here.
+ callback(WTF::move(request));
+}
+
void HostedNetscapePluginStream::didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse& response)
{
NSURLResponse *r = response.nsURLResponse();
Modified: branches/safari-601.1-branch/Source/WebKit/mac/Plugins/WebNetscapePluginStream.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit/mac/Plugins/WebNetscapePluginStream.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit/mac/Plugins/WebNetscapePluginStream.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -79,10 +79,12 @@
void startStreamWithResponse(NSURLResponse *response);
- void didReceiveData(WebCore::NetscapePlugInStreamLoader*, const char* bytes, int length);
void destroyStreamWithError(NSError *);
- void didFinishLoading(WebCore::NetscapePlugInStreamLoader*);
+ // FIXME: Can these be made private?
+ void didReceiveData(WebCore::NetscapePlugInStreamLoader*, const char* bytes, int length) override;
+ void didFinishLoading(WebCore::NetscapePlugInStreamLoader*) override;
+
private:
void destroyStream();
void cancelLoadWithError(NSError *);
@@ -95,6 +97,7 @@
NSError *pluginCancelledConnectionError() const;
// NetscapePlugInStreamLoaderClient methods.
+ void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&&, const WebCore::ResourceResponse& redirectResponse, std::function<void (WebCore::ResourceRequest&&)>&&) override;
void didReceiveResponse(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceResponse&);
void didFail(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceError&);
bool wantsAllStreams() const;
Modified: branches/safari-601.1-branch/Source/WebKit/mac/Plugins/WebNetscapePluginStream.mm (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit/mac/Plugins/WebNetscapePluginStream.mm 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit/mac/Plugins/WebNetscapePluginStream.mm 2015-08-06 23:09:38 UTC (rev 188076)
@@ -297,6 +297,12 @@
cancelLoadAndDestroyStreamWithError(m_loader->cancelledError());
}
+void WebNetscapePluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, std::function<void (WebCore::ResourceRequest&&)>&& callback)
+{
+ // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here.
+ callback(WTF::move(request));
+}
+
void WebNetscapePluginStream::didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse& response)
{
NSURLResponse *r = response.nsURLResponse();
Modified: branches/safari-601.1-branch/Source/WebKit/win/ChangeLog (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit/win/ChangeLog 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit/win/ChangeLog 2015-08-06 23:09:38 UTC (rev 188076)
@@ -1 +1,21 @@
+2015-08-06 Dana Burkart <dburk...@apple.com>
+
+ Merge r187886. rdar://problem/15779101
+
+ 2015-08-04 Alexey Proskuryakov <a...@apple.com>
+
+ Implement NPAPI redirect handling
+ https://bugs.webkit.org/show_bug.cgi?id=138675
+ rdar://problem/15779101
+
+ Patch by Jeffrey Pfau, updated and tweaked by me.
+
+ Reviewed by Anders Carlsson.
+
+ * Plugins/PluginStream.cpp:
+ (WebCore::PluginStream::sendJavaScriptStream):
+ (WebCore::PluginStream::willSendRequest):
+ (WebCore::PluginStream::didReceiveResponse):
+ * Plugins/PluginStream.h:
+
== Rolled over to ChangeLog-2015-07-23 ==
Modified: branches/safari-601.1-branch/Source/WebKit/win/Plugins/PluginStream.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit/win/Plugins/PluginStream.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit/win/Plugins/PluginStream.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -403,6 +403,12 @@
destroyStream(resultString.isNull() ? NPRES_NETWORK_ERR : NPRES_DONE);
}
+void PluginStream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse&, std::function<void (WebCore::ResourceRequest&&)>&& callback)
+{
+ // FIXME: We should notify the plug-in with NPP_URLRedirectNotify here.
+ callback(WTF::move(request));
+}
+
void PluginStream::didReceiveResponse(NetscapePlugInStreamLoader* loader, const ResourceResponse& response)
{
ASSERT_UNUSED(loader, loader == m_loader);
Modified: branches/safari-601.1-branch/Source/WebKit/win/Plugins/PluginStream.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit/win/Plugins/PluginStream.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit/win/Plugins/PluginStream.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -74,13 +74,6 @@
static NPP ownerForStream(NPStream*);
- // NetscapePlugInStreamLoaderClient
- virtual void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&);
- virtual void didReceiveData(NetscapePlugInStreamLoader*, const char*, int);
- virtual void didFail(NetscapePlugInStreamLoader*, const ResourceError&);
- virtual void didFinishLoading(NetscapePlugInStreamLoader*);
- virtual bool wantsAllStreams() const;
-
private:
PluginStream(PluginStreamClient*, Frame*, const ResourceRequest&, bool sendNotification, void* notifyData, const NPPluginFuncs*, NPP instance, const PluginQuirkSet&);
@@ -88,6 +81,14 @@
void destroyStream(NPReason);
void destroyStream();
+ // NetscapePlugInStreamLoaderClient
+ void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, std::function<void (ResourceRequest&&)>&&) override;
+ void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) override;
+ void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) override;
+ void didFail(NetscapePlugInStreamLoader*, const ResourceError&) override;
+ void didFinishLoading(NetscapePlugInStreamLoader*) override;
+ bool wantsAllStreams() const override;
+
ResourceRequest m_resourceRequest;
ResourceResponse m_resourceResponse;
Modified: branches/safari-601.1-branch/Source/WebKit2/ChangeLog (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/ChangeLog 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/ChangeLog 2015-08-06 23:09:38 UTC (rev 188076)
@@ -1,3 +1,81 @@
+2015-08-06 Dana Burkart <dburk...@apple.com>
+
+ Merge r187886. rdar://problem/15779101
+
+ 2015-08-04 Alexey Proskuryakov <a...@apple.com>
+
+ Implement NPAPI redirect handling
+ https://bugs.webkit.org/show_bug.cgi?id=138675
+ rdar://problem/15779101
+
+ Patch by Jeffrey Pfau, updated and tweaked by me.
+
+ Reviewed by Anders Carlsson.
+
+ * PluginProcess/PluginControllerProxy.cpp:
+ (WebKit::PluginControllerProxy::loadURL):
+ (WebKit::PluginControllerProxy::continueStreamLoad):
+ (WebKit::PluginControllerProxy::cancelStreamLoad):
+ (WebKit::PluginControllerProxy::didEvaluateJavaScript):
+ (WebKit::PluginControllerProxy::streamWillSendRequest):
+ (WebKit::PluginControllerProxy::streamDidReceiveResponse):
+ * PluginProcess/PluginControllerProxy.h:
+ * PluginProcess/PluginControllerProxy.messages.in:
+ * WebProcess/Network/WebResourceLoader.cpp:
+ (WebKit::WebResourceLoader::willSendRequest):
+ * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
+ (WebKit::NPN_ConvertPoint):
+ (WebKit::NPN_URLRedirectResponse):
+ (WebKit::initializeBrowserFuncs):
+ (WebKit::netscapeBrowserFuncs):
+ * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
+ (WebKit::NetscapePlugin::getAuthenticationInfo):
+ (WebKit::NetscapePlugin::registerRedirect):
+ (WebKit::NetscapePlugin::urlRedirectResponse):
+ (WebKit::NetscapePlugin::setIsPlayingAudio):
+ (WebKit::NetscapePlugin::NPP_URLNotify):
+ (WebKit::NetscapePlugin::NPP_URLRedirectNotify):
+ (WebKit::NetscapePlugin::NPP_GetValue):
+ (WebKit::NetscapePlugin::didEvaluateJavaScript):
+ (WebKit::NetscapePlugin::streamWillSendRequest):
+ (WebKit::NetscapePlugin::streamDidReceiveResponse):
+ * WebProcess/Plugins/Netscape/NetscapePlugin.h:
+ * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
+ (WebKit::NetscapePluginStream::~NetscapePluginStream):
+ (WebKit::NetscapePluginStream::willSendRequest):
+ (WebKit::NetscapePluginStream::didReceiveResponse):
+ (WebKit::NetscapePluginStream::stop):
+ (WebKit::NetscapePluginStream::setURL):
+ (WebKit::NetscapePluginStream::cancel):
+ * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
+ (WebKit::NetscapePluginStream::streamID):
+ (WebKit::NetscapePluginStream::npStream):
+ * WebProcess/Plugins/PDF/PDFPlugin.h:
+ * WebProcess/Plugins/Plugin.h:
+ * WebProcess/Plugins/PluginController.h:
+ * WebProcess/Plugins/PluginProxy.cpp:
+ (WebKit::PluginProxy::didEvaluateJavaScript):
+ (WebKit::PluginProxy::streamWillSendRequest):
+ (WebKit::PluginProxy::streamDidReceiveResponse):
+ (WebKit::PluginProxy::setPluginIsPlayingAudio):
+ (WebKit::PluginProxy::continueStreamLoad):
+ (WebKit::PluginProxy::cancelStreamLoad):
+ * WebProcess/Plugins/PluginProxy.h:
+ * WebProcess/Plugins/PluginProxy.messages.in:
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::Stream::streamID):
+ (WebKit::PluginView::Stream::Stream):
+ (WebKit::PluginView::Stream::cancel):
+ (WebKit::PluginView::Stream::continueLoad):
+ (WebKit::buildHTTPHeaders):
+ (WebKit::lastModifiedDateMS):
+ (WebKit::PluginView::Stream::willSendRequest):
+ (WebKit::PluginView::Stream::didReceiveResponse):
+ (WebKit::PluginView::cancelStreamLoad):
+ (WebKit::PluginView::continueStreamLoad):
+ (WebKit::PluginView::cancelManualStreamLoad):
+ * WebProcess/Plugins/PluginView.h:
+
2015-08-03 Matthew Hanson <matthew_han...@apple.com>
Merge r187691. rdar://problem/22060183
Modified: branches/safari-601.1-branch/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/PluginProcess/PluginControllerProxy.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -241,6 +241,11 @@
m_connection->connection()->send(Messages::PluginProxy::LoadURL(requestID, method, urlString, target, headerFields, httpBody, allowPopups), m_pluginInstanceID);
}
+void PluginControllerProxy::continueStreamLoad(uint64_t streamID)
+{
+ m_connection->connection()->send(Messages::PluginProxy::ContinueStreamLoad(streamID), m_pluginInstanceID);
+}
+
void PluginControllerProxy::cancelStreamLoad(uint64_t streamID)
{
m_connection->connection()->send(Messages::PluginProxy::CancelStreamLoad(streamID), m_pluginInstanceID);
@@ -463,6 +468,11 @@
m_plugin->didEvaluateJavaScript(requestID, result);
}
+void PluginControllerProxy::streamWillSendRequest(uint64_t streamID, const String& requestURLString, const String& redirectResponseURLString, uint32_t redirectResponseStatusCode)
+{
+ m_plugin->streamWillSendRequest(streamID, URL(ParsedURLString, requestURLString), URL(ParsedURLString, redirectResponseURLString), redirectResponseStatusCode);
+}
+
void PluginControllerProxy::streamDidReceiveResponse(uint64_t streamID, const String& responseURLString, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers)
{
m_plugin->streamDidReceiveResponse(streamID, URL(ParsedURLString, responseURLString), streamLength, lastModifiedTime, mimeType, headers, String());
Modified: branches/safari-601.1-branch/Source/WebKit2/PluginProcess/PluginControllerProxy.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/PluginProcess/PluginControllerProxy.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/PluginProcess/PluginControllerProxy.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -86,6 +86,7 @@
virtual void invalidate(const WebCore::IntRect&) override;
virtual String userAgent() override;
virtual void loadURL(uint64_t requestID, const String& method, const String& urlString, const String& target, const WebCore::HTTPHeaderMap& headerFields, const Vector<uint8_t>& httpBody, bool allowPopups) override;
+ virtual void continueStreamLoad(uint64_t streamID) override;
virtual void cancelStreamLoad(uint64_t streamID) override;
virtual void cancelManualStreamLoad() override;
virtual NPObject* windowScriptNPObject() override;
@@ -126,6 +127,7 @@
void geometryDidChange(const WebCore::IntSize& pluginSize, const WebCore::IntRect& clipRect, const WebCore::AffineTransform& pluginToRootViewTransform, float contentsScaleFactor, const ShareableBitmap::Handle& backingStoreHandle);
void visibilityDidChange(bool isVisible);
void didEvaluateJavaScript(uint64_t requestID, const String& result);
+ void streamWillSendRequest(uint64_t streamID, const String& requestURLString, const String& redirectResponseURLString, uint32_t redirectResponseStatusCode);
void streamDidReceiveResponse(uint64_t streamID, const String& responseURLString, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers);
void streamDidReceiveData(uint64_t streamID, const IPC::DataReference& data);
void streamDidFinishLoading(uint64_t streamID);
Modified: branches/safari-601.1-branch/Source/WebKit2/PluginProcess/PluginControllerProxy.messages.in (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/PluginProcess/PluginControllerProxy.messages.in 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/PluginProcess/PluginControllerProxy.messages.in 2015-08-06 23:09:38 UTC (rev 188076)
@@ -38,6 +38,9 @@
# Sent when _javascript_ that the plug-in asked to be evaluated has been evaluated.
DidEvaluateJavaScript(uint64_t requestID, String result)
+ # Sent when the plug-in receives will send a request for a stream.
+ StreamWillSendRequest(uint64_t streamID, String requestURLString, String redirectResponseURLString, uint32_t redirectResponseStatusCode)
+
# Sent when the plug-in receives a response for a stream.
StreamDidReceiveResponse(uint64_t streamID, String responseURLString, uint32_t streamLength, uint32_t lastModifiedTime, String mimeType, String headers)
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -89,14 +89,11 @@
if (m_coreLoader->documentLoader()->applicationCacheHost()->maybeLoadFallbackForRedirect(m_coreLoader.get(), newRequest, redirectResponse))
return;
// FIXME: Do we need to update NetworkResourceLoader clientCredentialPolicy in case loader policy is DoNotAskClientForCrossOriginCredentials?
- m_coreLoader->willSendRequest(WTF::move(newRequest), redirectResponse, [protect](ResourceRequest& request) {
+ m_coreLoader->willSendRequest(WTF::move(newRequest), redirectResponse, [protect](ResourceRequest&& request) {
if (!protect->m_coreLoader)
return;
- if (!request.isNull())
- protect->send(Messages::NetworkResourceLoader::ContinueWillSendRequest(request));
- else
- protect->m_coreLoader->cancel();
+ protect->send(Messages::NetworkResourceLoader::ContinueWillSendRequest(request));
});
}
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -983,6 +983,13 @@
}
#endif
+static void NPN_URLRedirectResponse(NPP npp, void* notifyData, NPBool allow)
+{
+ RefPtr<NetscapePlugin> plugin = NetscapePlugin::fromNPP(npp);
+
+ plugin->urlRedirectResponse(notifyData, allow);
+}
+
static void initializeBrowserFuncs(NPNetscapeFuncs &netscapeFuncs)
{
netscapeFuncs.size = sizeof(NPNetscapeFuncs);
@@ -1046,6 +1053,11 @@
netscapeFuncs.popupcontextmenu = 0;
netscapeFuncs.convertpoint = 0;
#endif
+#if ENABLE(NETWORK_PROCESS)
+ netscapeFuncs.urlredirectresponse = NPN_URLRedirectResponse;
+#else
+ netscapeFuncs.urlredirectresponse = 0;
+#endif
}
NPNetscapeFuncs* netscapeBrowserFuncs()
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -396,8 +396,41 @@
bool NetscapePlugin::getAuthenticationInfo(const ProtectionSpace& protectionSpace, String& username, String& password)
{
return controller()->getAuthenticationInfo(protectionSpace, username, password);
-}
+}
+void NetscapePlugin::registerRedirect(NetscapePluginStream* stream, const URL& requestURL, int redirectResponseStatus, void* notificationData)
+{
+#if ENABLE(NETWORK_PROCESS)
+ // NPP_URLRedirectNotify may synchronously request this stream back out, so set it first
+ m_redirects.set(notificationData, std::make_pair(stream, requestURL.string()));
+ if (!NPP_URLRedirectNotify(requestURL.string().utf8().data(), redirectResponseStatus, notificationData)) {
+ m_redirects.take(notificationData);
+ controller()->continueStreamLoad(stream->streamID());
+ }
+#else
+ controller()->continueStreamLoad(stream->streamID());
+#endif
+}
+
+void NetscapePlugin::urlRedirectResponse(void* notifyData, bool allow)
+{
+ if (!m_redirects.contains(notifyData))
+ return;
+
+ auto redirect = m_redirects.take(notifyData);
+ if (!redirect.first)
+ return;
+
+ RefPtr<NetscapePluginStream> stream = redirect.first;
+ if (!allow) {
+ controller()->cancelStreamLoad(stream->streamID());
+ stream->stop(NPRES_USER_BREAK);
+ } else {
+ stream->setURL(redirect.second);
+ controller()->continueStreamLoad(stream->streamID());
+ }
+}
+
void NetscapePlugin::setIsPlayingAudio(bool isPlayingAudio)
{
controller()->setPluginIsPlayingAudio(isPlayingAudio);
@@ -453,6 +486,15 @@
m_pluginModule->pluginFuncs().urlnotify(&m_npp, url, reason, notifyData);
}
+bool NetscapePlugin::NPP_URLRedirectNotify(const char* url, int32_t status, void* notifyData)
+{
+ if (!m_pluginModule->pluginFuncs().urlredirectnotify)
+ return false;
+
+ m_pluginModule->pluginFuncs().urlredirectnotify(&m_npp, url, status, notifyData);
+ return true;
+}
+
NPError NetscapePlugin::NPP_GetValue(NPPVariable variable, void *value)
{
if (!m_pluginModule->pluginFuncs().getvalue)
@@ -814,6 +856,14 @@
pluginStream->sendJavaScriptStream(result);
}
+void NetscapePlugin::streamWillSendRequest(uint64_t streamID, const URL& requestURL, const URL& redirectResponseURL, int redirectResponseStatus)
+{
+ ASSERT(m_isStarted);
+
+ if (NetscapePluginStream* pluginStream = streamFromID(streamID))
+ pluginStream->willSendRequest(requestURL, redirectResponseURL, redirectResponseStatus);
+}
+
void NetscapePlugin::streamDidReceiveResponse(uint64_t streamID, const URL& responseURL, uint32_t streamLength,
uint32_t lastModifiedTime, const String& mimeType, const String& headers, const String& /* suggestedFileName */)
{
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -141,6 +141,9 @@
void setIsPlayingAudio(bool);
+ void registerRedirect(NetscapePluginStream*, const WebCore::URL& requestURL, int redirectResponseStatus, void* notificationData);
+ void urlRedirectResponse(void* notifyData, bool allow);
+
// Member functions for calling into the plug-in.
NPError NPP_New(NPMIMEType pluginType, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData*);
NPError NPP_Destroy(NPSavedData**);
@@ -152,6 +155,7 @@
int32_t NPP_Write(NPStream*, int32_t offset, int32_t len, void* buffer);
int16_t NPP_HandleEvent(void* event);
void NPP_URLNotify(const char* url, NPReason, void* notifyData);
+ bool NPP_URLRedirectNotify(const char* url, int32_t status, void* notifyData);
NPError NPP_GetValue(NPPVariable, void *value);
NPError NPP_SetValue(NPNVariable, void *value);
@@ -199,7 +203,8 @@
virtual void frameDidFinishLoading(uint64_t requestID) override;
virtual void frameDidFail(uint64_t requestID, bool wasCancelled) override;
virtual void didEvaluateJavaScript(uint64_t requestID, const String& result) override;
- virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::URL& responseURL, uint32_t streamLength,
+ virtual void streamWillSendRequest(uint64_t streamID, const WebCore::URL& requestURL, const WebCore::URL& responseURL, int responseStatus) override;
+ virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::URL& responseURL, uint32_t streamLength,
uint32_t lastModifiedTime, const String& mimeType, const String& headers, const String& suggestedFileName) override;
virtual void streamDidReceiveData(uint64_t streamID, const char* bytes, int length) override;
virtual void streamDidFinishLoading(uint64_t streamID) override;
@@ -288,6 +293,7 @@
typedef HashMap<uint64_t, RefPtr<NetscapePluginStream>> StreamsMap;
StreamsMap m_streams;
+ HashMap<void*, std::pair<RefPtr<NetscapePluginStream>, String>> m_redirects;
RefPtr<NetscapePluginModule> m_pluginModule;
NPP_t m_npp;
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePluginStream.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePluginStream.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePluginStream.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -62,6 +62,14 @@
ASSERT(m_fileHandle == invalidPlatformFileHandle);
}
+void NetscapePluginStream::willSendRequest(const URL& requestURL, const URL& redirectResponseURL, int redirectResponseStatus)
+{
+ Ref<NetscapePluginStream> protect(*this);
+
+ if (redirectResponseStatus >= 300 && redirectResponseStatus < 400)
+ m_plugin->registerRedirect(this, requestURL, redirectResponseStatus, m_notificationData);
+}
+
void NetscapePluginStream::didReceiveResponse(const URL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers)
{
// Starting the stream could cause the plug-in stream to go away so we keep a reference to it here.
@@ -338,6 +346,11 @@
notifyAndDestroyStream(reason);
}
+void NetscapePluginStream::setURL(const String& newURLString)
+{
+ m_requestURLString = newURLString;
+}
+
void NetscapePluginStream::cancel()
{
m_plugin->cancelStreamLoad(this);
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePluginStream.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePluginStream.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePluginStream.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -57,6 +57,7 @@
uint64_t streamID() const { return m_streamID; }
const NPStream* npStream() const { return &m_npStream; }
+ void willSendRequest(const WebCore::URL& requestURL, const WebCore::URL& redirectResponseURL, int redirectResponseStatus);
void didReceiveResponse(const WebCore::URL& responseURL, uint32_t streamLength,
uint32_t lastModifiedTime, const String& mimeType, const String& headers);
void didReceiveData(const char* bytes, int length);
@@ -67,6 +68,7 @@
void stop(NPReason);
NPError destroy(NPReason);
+ void setURL(const String& newURLString);
private:
NetscapePluginStream(PassRefPtr<NetscapePlugin>, uint64_t streamID, const String& requestURLString, bool sendNotification, void* notificationData);
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -128,6 +128,7 @@
virtual void frameDidFinishLoading(uint64_t requestID) override;
virtual void frameDidFail(uint64_t requestID, bool wasCancelled) override;
virtual void didEvaluateJavaScript(uint64_t requestID, const String& result) override;
+ virtual void streamWillSendRequest(uint64_t streamID, const WebCore::URL& requestURL, const WebCore::URL& responseURL, int responseStatus) override { }
virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::URL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers, const String& suggestedFileName) override;
virtual void streamDidReceiveData(uint64_t streamID, const char* bytes, int length) override;
virtual void streamDidFinishLoading(uint64_t streamID) override;
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Plugin.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Plugin.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/Plugin.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -165,6 +165,9 @@
// back the result. If evaluating the script failed, result will be null.
virtual void didEvaluateJavaScript(uint64_t requestID, const String& result) = 0;
+ // Tells the plug-in that a stream may send an HTTP request.
+ virtual void streamWillSendRequest(uint64_t streamID, const WebCore::URL& requestURL, const WebCore::URL& responseURL, int responseStatusCode) = 0;
+
// Tells the plug-in that a stream has received its HTTP response.
virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::URL& responseURL, uint32_t streamLength,
uint32_t lastModifiedTime, const String& mimeType, const String& headers, const String& suggestedFileName) = 0;
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginController.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginController.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginController.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -64,7 +64,10 @@
virtual void loadURL(uint64_t requestID, const String& method, const String& urlString, const String& target,
const WebCore::HTTPHeaderMap& headerFields, const Vector<uint8_t>& httpBody, bool allowPopups) = 0;
- /// Cancels the load of a stream that was requested by loadURL.
+ // Continues the load of a stream that was requested by loadURL.
+ virtual void continueStreamLoad(uint64_t streamID) = 0;
+
+ // Cancels the load of a stream that was requested by loadURL.
virtual void cancelStreamLoad(uint64_t streamID) = 0;
// Cancels the load of the manual stream.
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -321,6 +321,11 @@
m_connection->connection()->send(Messages::PluginControllerProxy::DidEvaluateJavaScript(requestID, result), m_pluginInstanceID);
}
+void PluginProxy::streamWillSendRequest(uint64_t streamID, const URL& requestURL, const URL& responseURL, int responseStatus)
+{
+ m_connection->connection()->send(Messages::PluginControllerProxy::StreamWillSendRequest(streamID, requestURL.string(), responseURL.string(), responseStatus), m_pluginInstanceID);
+}
+
void PluginProxy::streamDidReceiveResponse(uint64_t streamID, const URL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const WTF::String& mimeType, const WTF::String& headers, const String& /* suggestedFileName */)
{
m_connection->connection()->send(Messages::PluginControllerProxy::StreamDidReceiveResponse(streamID, responseURL.string(), streamLength, lastModifiedTime, mimeType, headers), m_pluginInstanceID);
@@ -661,6 +666,11 @@
controller()->setPluginIsPlayingAudio(pluginIsPlayingAudio);
}
+void PluginProxy::continueStreamLoad(uint64_t streamID)
+{
+ controller()->continueStreamLoad(streamID);
+}
+
void PluginProxy::cancelStreamLoad(uint64_t streamID)
{
controller()->cancelStreamLoad(streamID);
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -90,6 +90,7 @@
virtual void frameDidFinishLoading(uint64_t requestID) override;
virtual void frameDidFail(uint64_t requestID, bool wasCancelled) override;
virtual void didEvaluateJavaScript(uint64_t requestID, const String& result) override;
+ virtual void streamWillSendRequest(uint64_t streamID, const WebCore::URL& requestURL, const WebCore::URL& responseURL, int responseStatus) override;
virtual void streamDidReceiveResponse(uint64_t streamID, const WebCore::URL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers, const String& suggestedFileName) override;
virtual void streamDidReceiveData(uint64_t streamID, const char* bytes, int length) override;
virtual void streamDidFinishLoading(uint64_t streamID) override;
@@ -168,6 +169,7 @@
void getPluginElementNPObject(uint64_t& pluginElementNPObjectID);
void evaluate(const NPVariantData& npObjectAsVariantData, const String& scriptString, bool allowPopups, bool& returnValue, NPVariantData& resultData);
void setPluginIsPlayingAudio(bool);
+ void continueStreamLoad(uint64_t streamID);
void cancelStreamLoad(uint64_t streamID);
void cancelManualStreamLoad();
void setStatusbarText(const String& statusbarText);
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.messages.in (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.messages.in 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.messages.in 2015-08-06 23:09:38 UTC (rev 188076)
@@ -50,6 +50,9 @@
# Cancels the given stream load.
CancelStreamLoad(uint64_t streamID)
+ # Continues the given stream load.
+ ContinueStreamLoad(uint64_t streamID)
+
# Cancel the manual stream load.
CancelManualStreamLoad()
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginView.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginView.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginView.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -115,6 +115,7 @@
void start();
void cancel();
+ void continueLoad();
uint64_t streamID() const { return m_streamID; }
@@ -128,15 +129,17 @@
}
// NetscapePluginStreamLoaderClient
- virtual void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&);
- virtual void didReceiveData(NetscapePlugInStreamLoader*, const char*, int);
- virtual void didFail(NetscapePlugInStreamLoader*, const ResourceError&);
- virtual void didFinishLoading(NetscapePlugInStreamLoader*);
+ void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, std::function<void (ResourceRequest&&)>&&) override;
+ void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) override;
+ void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) override;
+ void didFail(NetscapePlugInStreamLoader*, const ResourceError&) override;
+ void didFinishLoading(NetscapePlugInStreamLoader*) override;
PluginView* m_pluginView;
uint64_t m_streamID;
- const ResourceRequest m_request;
-
+ ResourceRequest m_request;
+ std::function<void (ResourceRequest)> m_loadCallback;
+
// True if the stream was explicitly cancelled by calling cancel().
// (As opposed to being cancelled by the user hitting the stop button for example.
bool m_streamWasCancelled;
@@ -169,6 +172,14 @@
m_loader = nullptr;
}
+void PluginView::Stream::continueLoad()
+{
+ ASSERT(m_pluginView->m_plugin);
+ ASSERT(m_loadCallback);
+
+ m_loadCallback(m_request);
+}
+
static String buildHTTPHeaders(const ResourceResponse& response, long long& expectedContentLength)
{
if (!response.isHTTP())
@@ -210,6 +221,16 @@
return std::chrono::duration_cast<std::chrono::milliseconds>(lastModified.value().time_since_epoch()).count();
}
+void PluginView::Stream::willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&& request, const ResourceResponse& redirectResponse, std::function<void (ResourceRequest&&)>&& decisionHandler)
+{
+ const URL& requestURL = request.url();
+ const URL& redirectResponseURL = redirectResponse.url();
+
+ m_loadCallback = decisionHandler;
+ m_request = request;
+ m_pluginView->m_plugin->streamWillSendRequest(m_streamID, requestURL, redirectResponseURL, redirectResponse.httpStatusCode());
+}
+
void PluginView::Stream::didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse& response)
{
// Compute the stream related data from the resource response.
@@ -1404,6 +1425,15 @@
ASSERT(!m_streams.contains(streamID));
}
+void PluginView::continueStreamLoad(uint64_t streamID)
+{
+ RefPtr<Stream> stream = m_streams.get(streamID);
+ if (!stream)
+ return;
+
+ stream->continueLoad();
+}
+
void PluginView::cancelManualStreamLoad()
{
if (!frame())
Modified: branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginView.h (188075 => 188076)
--- branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginView.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Source/WebKit2/WebProcess/Plugins/PluginView.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -196,6 +196,7 @@
virtual String userAgent() override;
virtual void loadURL(uint64_t requestID, const String& method, const String& urlString, const String& target, const WebCore::HTTPHeaderMap& headerFields, const Vector<uint8_t>& httpBody, bool allowPopups) override;
virtual void cancelStreamLoad(uint64_t streamID) override;
+ virtual void continueStreamLoad(uint64_t streamID) override;
virtual void cancelManualStreamLoad() override;
#if ENABLE(NETSCAPE_PLUGIN_API)
virtual NPObject* windowScriptNPObject() override;
Modified: branches/safari-601.1-branch/Tools/ChangeLog (188075 => 188076)
--- branches/safari-601.1-branch/Tools/ChangeLog 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Tools/ChangeLog 2015-08-06 23:09:38 UTC (rev 188076)
@@ -1,3 +1,47 @@
+2015-08-06 Dana Burkart <dburk...@apple.com>
+
+ Merge r187886. rdar://problem/15779101
+
+ 2015-08-04 Alexey Proskuryakov <a...@apple.com>
+
+ Implement NPAPI redirect handling
+ https://bugs.webkit.org/show_bug.cgi?id=138675
+ rdar://problem/15779101
+
+ Patch by Jeffrey Pfau, updated and tweaked by me.
+
+ Reviewed by Anders Carlsson.
+
+ * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
+ * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj.filters:
+ * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
+ * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
+ * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
+ (PluginTest::NPP_URLNotify):
+ (PluginTest::NPP_URLRedirectNotify):
+ (PluginTest::NPP_GetValue):
+ (PluginTest::NPN_GetURLNotify):
+ (PluginTest::NPN_PostURLNotify):
+ (PluginTest::NPN_GetValue):
+ (PluginTest::NPN_ReleaseVariantValue):
+ (PluginTest::NPN_URLRedirectResponse):
+ (PluginTest::NPN_ConvertPoint):
+ * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
+ * DumpRenderTree/TestNetscapePlugIn/Tests/URLRedirect.cpp: Added.
+ (URLRedirect::URLRedirect):
+ (URLRedirect::ScriptableObject::hasMethod):
+ (URLRedirect::ScriptableObject::get):
+ (URLRedirect::ScriptableObject::serviceAsync):
+ (URLRedirect::ScriptableObject::invoke):
+ (URLRedirect::NPP_GetValue):
+ (URLRedirect::NPP_URLNotify):
+ (URLRedirect::NPP_URLRedirectNotify):
+ * DumpRenderTree/TestNetscapePlugIn/main.cpp:
+ (NP_GetEntryPoints):
+ (NPP_URLNotify):
+ (NPP_URLRedirectNotify):
+ (NPP_GetValue):
+
2015-07-27 Babak Shafiei <bshaf...@apple.com>
Merge r187371.
Modified: branches/safari-601.1-branch/Tools/DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj (188075 => 188076)
--- branches/safari-601.1-branch/Tools/DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Tools/DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj 2015-08-06 23:09:38 UTC (rev 188076)
@@ -75,6 +75,7 @@
<ClCompile Include="..\..\TestNetscapePlugIn\Tests\PluginScriptableObjectOverridesAllProperties.cpp" />
<ClCompile Include="..\..\TestNetscapePlugIn\Tests\PrivateBrowsing.cpp" />
<ClCompile Include="..\..\TestNetscapePlugIn\Tests\ToStringAndValueOfObject.cpp" />
+ <ClCompile Include="..\..\TestNetscapePlugIn\Tests\URLRedirect.cpp" />
<ClCompile Include="..\..\TestNetscapePlugIn\Tests\win\CallJSThatDestroysPlugin.cpp" />
<ClCompile Include="..\..\TestNetscapePlugIn\Tests\win\DrawsGradient.cpp" />
<ClCompile Include="..\..\TestNetscapePlugIn\Tests\win\DumpWindowRect.cpp" />
@@ -234,4 +235,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
\ No newline at end of file
+</Project>
Modified: branches/safari-601.1-branch/Tools/DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj.filters (188075 => 188076)
--- branches/safari-601.1-branch/Tools/DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj.filters 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Tools/DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj.filters 2015-08-06 23:09:38 UTC (rev 188076)
@@ -71,6 +71,9 @@
<ClCompile Include="..\..\TestNetscapePlugIn\Tests\ToStringAndValueOfObject.cpp">
<Filter>Tests</Filter>
</ClCompile>
+ <ClCompile Include="..\..\TestNetscapePlugIn\Tests\URLRedirect.cpp">
+ <Filter>Tests</Filter>
+ </ClCompile>
<ClCompile Include="..\..\TestNetscapePlugIn\Tests\win\CallJSThatDestroysPlugin.cpp">
<Filter>Tests\win</Filter>
</ClCompile>
@@ -136,4 +139,4 @@
<Filter>Resources</Filter>
</ResourceCompile>
</ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
Modified: branches/safari-601.1-branch/Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj (188075 => 188076)
--- branches/safari-601.1-branch/Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj 2015-08-06 23:09:38 UTC (rev 188076)
@@ -24,6 +24,7 @@
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
+ 00F048541A0C3C9A000244DB /* URLRedirect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00F048531A0C3C9A000244DB /* URLRedirect.cpp */; };
0F37A4A711E6628700275F54 /* PluginObjectMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F37A4A611E6628700275F54 /* PluginObjectMac.mm */; };
0F37A4AA11E6629100275F54 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5A752A108AF5D1F00138E45 /* QuartzCore.framework */; };
141BF435096A455900E0753C /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9335435F03D75502008635CE /* WebKit.framework */; };
@@ -200,6 +201,7 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 00F048531A0C3C9A000244DB /* URLRedirect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = URLRedirect.cpp; sourceTree = "<group>"; };
0F37A4A611E6628700275F54 /* PluginObjectMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PluginObjectMac.mm; sourceTree = "<group>"; };
141BF233096A44CF00E0753C /* TestNetscapePlugIn.plugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestNetscapePlugIn.plugin; sourceTree = BUILT_PRODUCTS_DIR; };
141BF447096A45C800E0753C /* PluginObject.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PluginObject.h; sourceTree = "<group>"; };
@@ -561,6 +563,7 @@
1A1E4296141141C400388758 /* PrivateBrowsing.cpp */,
5106803D15CC7B10001A8A23 /* SlowNPPNew.cpp */,
1A4CCD4E171375A300981040 /* ToStringAndValueOfObject.cpp */,
+ 00F048531A0C3C9A000244DB /* URLRedirect.cpp */,
);
path = Tests;
sourceTree = "<group>";
@@ -924,6 +927,7 @@
5106803E15CC7B10001A8A23 /* SlowNPPNew.cpp in Sources */,
1A14C8A51406DE0400B254F7 /* SupportsCarbonEventModel.cpp in Sources */,
1AC6C84B0D07638600CD3161 /* TestObject.cpp in Sources */,
+ 00F048541A0C3C9A000244DB /* URLRedirect.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Modified: branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt (188075 => 188076)
--- branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt 2015-08-06 23:09:38 UTC (rev 188076)
@@ -26,6 +26,7 @@
${WEBKIT_TESTNETSCAPEPLUGIN_DIR}/Tests/PluginScriptableObjectOverridesAllProperties.cpp
${WEBKIT_TESTNETSCAPEPLUGIN_DIR}/Tests/PrivateBrowsing.cpp
${WEBKIT_TESTNETSCAPEPLUGIN_DIR}/Tests/ToStringAndValueOfObject.cpp
+ ${WEBKIT_TESTNETSCAPEPLUGIN_DIR}/Tests/URLRedirect.cpp
${WEBKIT_TESTNETSCAPEPLUGIN_DIR}/Tests/x11/CallInvalidateRectWithNullNPPArgument.cpp
)
Modified: branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -136,6 +136,11 @@
return false;
}
+void PluginTest::NPP_URLRedirectNotify(const char*, int32_t, void* notifyData)
+{
+ NPN_URLRedirectResponse(notifyData, true);
+}
+
NPError PluginTest::NPP_GetValue(NPPVariable variable, void *value)
{
// We don't know anything about plug-in values so just return NPERR_GENERIC_ERROR.
@@ -159,6 +164,11 @@
return browser->geturlnotify(m_npp, url, target, notifyData);
}
+NPError PluginTest::NPN_PostURLNotify(const char *url, const char *target, uint32_t len, const char* buf, NPBool file, void *notifyData)
+{
+ return browser->posturlnotify(m_npp, url, target, len, buf, file, notifyData);
+}
+
NPError PluginTest::NPN_GetValue(NPNVariable variable, void* value)
{
return browser->getvalue(m_npp, variable, value);
@@ -231,6 +241,11 @@
browser->releasevariantvalue(variant);
}
+void PluginTest::NPN_URLRedirectResponse(void* notifyData, NPBool allow)
+{
+ browser->urlredirectresponse(m_npp, notifyData, allow);
+}
+
#ifdef XP_MACOSX
bool PluginTest::NPN_ConvertPoint(double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace)
{
Modified: branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/PluginTest.h (188075 => 188076)
--- branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/PluginTest.h 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/PluginTest.h 2015-08-06 23:09:38 UTC (rev 188076)
@@ -68,12 +68,14 @@
virtual int16_t NPP_HandleEvent(void* event);
virtual bool NPP_URLNotify(const char* url, NPReason, void* notifyData);
+ virtual void NPP_URLRedirectNotify(const char* url, int32_t status, void* notifyData);
virtual NPError NPP_GetValue(NPPVariable, void* value);
virtual NPError NPP_SetValue(NPNVariable, void *value);
// NPN functions.
NPError NPN_GetURL(const char* url, const char* target);
NPError NPN_GetURLNotify(const char* url, const char* target, void* notifyData);
+ NPError NPN_PostURLNotify(const char *url, const char *target, uint32_t len, const char* buf, NPBool file, void *notifyData);
NPError NPN_GetValue(NPNVariable, void* value);
void NPN_InvalidateRect(NPRect* invalidRect);
bool NPN_Invoke(NPObject *, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result);
@@ -91,6 +93,7 @@
void NPN_ReleaseObject(NPObject*);
bool NPN_RemoveProperty(NPObject*, NPIdentifier propertyName);
void NPN_ReleaseVariantValue(NPVariant*);
+ void NPN_URLRedirectResponse(void* notifyData, NPBool allow);
#ifdef XP_MACOSX
bool NPN_ConvertPoint(double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
Added: branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/Tests/URLRedirect.cpp (0 => 188076)
--- branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/Tests/URLRedirect.cpp (rev 0)
+++ branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/Tests/URLRedirect.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "PluginTest.h"
+
+#include <string.h>
+
+using namespace std;
+
+class URLRedirect : public PluginTest {
+public:
+ URLRedirect(NPP npp, const string& identifier)
+ : PluginTest(npp, identifier)
+ {
+ }
+
+ struct Redirect {
+ int redirectsRemaining;
+ bool async;
+ bool hasFired;
+ };
+
+ std::map<void*, Redirect> redirects;
+
+private:
+ // This is the test object.
+ class TestObject : public Object<TestObject> { };
+
+ // This is the scriptable object. It has a single "testObject" property and an "evaluate" function.
+ class ScriptableObject : public Object<ScriptableObject> {
+ public:
+ bool hasMethod(NPIdentifier methodName)
+ {
+ return identifierIs(methodName, "get") || identifierIs(methodName, "getAsync") || identifierIs(methodName, "serviceAsync");
+ }
+
+ bool get(const NPVariant* args, uint32_t argCount, NPVariant* result, bool async)
+ {
+ if (argCount != 3 || !NPVARIANT_IS_STRING(args[0]) || !(NPVARIANT_IS_BOOLEAN(args[1]) || NPVARIANT_IS_DOUBLE(args[1]) || NPVARIANT_IS_INT32(args[1])) || !NPVARIANT_IS_STRING(args[2]))
+ return false;
+
+ const NPString* notifyString = &NPVARIANT_TO_STRING(args[2]);
+ basic_string<NPUTF8> notify(notifyString->UTF8Characters, notifyString->UTF8Length);
+ NPIdentifier notifyMethod = pluginTest()->NPN_GetStringIdentifier(notify.c_str());
+
+ Redirect& redirect = static_cast<URLRedirect*>(pluginTest())->redirects[reinterpret_cast<void*>(notifyMethod)];
+ if (NPVARIANT_IS_DOUBLE(args[1]))
+ redirect.redirectsRemaining = NPVARIANT_TO_DOUBLE(args[1]);
+ else if (NPVARIANT_IS_INT32(args[1]))
+ redirect.redirectsRemaining = NPVARIANT_TO_INT32(args[1]);
+ else if (NPVARIANT_IS_BOOLEAN(args[1]))
+ redirect.redirectsRemaining = NPVARIANT_TO_BOOLEAN(args[1]);
+ redirect.async = async;
+ redirect.hasFired = true;
+
+ const NPString* urlString = &NPVARIANT_TO_STRING(args[0]);
+ basic_string<NPUTF8> url(urlString->UTF8Characters, urlString->UTF8Length);
+
+ pluginTest()->NPN_GetURLNotify(url.c_str(), 0, reinterpret_cast<void*>(notifyMethod));
+
+ VOID_TO_NPVARIANT(*result);
+ return true;
+ }
+
+ bool serviceAsync(const NPVariant* args, uint32_t argCount, NPVariant* result)
+ {
+ if (argCount)
+ return false;
+
+ NPBool seen = 0;
+ URLRedirect* plugin = static_cast<URLRedirect*>(pluginTest());
+ for (auto& redirect : plugin->redirects) {
+ if (redirect.second.hasFired)
+ continue;
+ redirect.second.hasFired = true;
+ plugin->NPN_URLRedirectResponse(redirect.first, redirect.second.redirectsRemaining);
+ if (redirect.second.redirectsRemaining)
+ --redirect.second.redirectsRemaining;
+ seen = 1;
+ }
+
+ BOOLEAN_TO_NPVARIANT(seen, *result);
+ return true;
+ }
+
+ bool invoke(NPIdentifier methodName, const NPVariant* args, uint32_t argCount, NPVariant* result)
+ {
+ if (identifierIs(methodName, "get"))
+ return get(args, argCount, result, false);
+
+ if (identifierIs(methodName, "getAsync"))
+ return get(args, argCount, result, true);
+
+ if (identifierIs(methodName, "serviceAsync"))
+ return serviceAsync(args, argCount, result);
+
+ return false;
+ }
+ };
+
+ virtual NPError NPP_GetValue(NPPVariable variable, void *value)
+ {
+ if (variable != NPPVpluginScriptableNPObject)
+ return NPERR_GENERIC_ERROR;
+
+ *(NPObject**)value = ScriptableObject::create(this);
+
+ return NPERR_NO_ERROR;
+ }
+
+ virtual bool NPP_URLNotify(const char* url, NPReason reason, void* notifyData)
+ {
+ NPVariant args[2];
+
+ NPObject* windowScriptObject;
+ NPN_GetValue(NPNVWindowNPObject, &windowScriptObject);
+
+ NPIdentifier callbackIdentifier = notifyData;
+
+ INT32_TO_NPVARIANT(reason, args[0]);
+ STRINGZ_TO_NPVARIANT(url, args[1]);
+
+ NPVariant browserResult;
+ if (NPN_Invoke(windowScriptObject, callbackIdentifier, args, 2, &browserResult))
+ NPN_ReleaseVariantValue(&browserResult);
+
+ return true;
+ }
+
+ virtual void NPP_URLRedirectNotify(const char*, int32_t, void* notifyData)
+ {
+ Redirect& redirect = redirects[notifyData];
+ if (redirect.async) {
+ redirect.hasFired = false;
+ return;
+ }
+
+ NPN_URLRedirectResponse(notifyData, redirect.redirectsRemaining);
+ if (redirect.redirectsRemaining)
+ --redirect.redirectsRemaining;
+ }
+};
+
+static PluginTest::Register<URLRedirect> urlRedirect("url-redirect");
+
Modified: branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp (188075 => 188076)
--- branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp 2015-08-06 23:08:48 UTC (rev 188075)
+++ branches/safari-601.1-branch/Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp 2015-08-06 23:09:38 UTC (rev 188076)
@@ -116,6 +116,7 @@
pluginFuncs->print = NPP_Print;
pluginFuncs->event = NPP_HandleEvent;
pluginFuncs->urlnotify = NPP_URLNotify;
+ pluginFuncs->urlredirectnotify = NPP_URLRedirectNotify;
pluginFuncs->getvalue = NPP_GetValue;
pluginFuncs->setvalue = NPP_SetValue;
@@ -799,6 +800,12 @@
handleCallback(obj, url, reason, notifyData);
}
+void NPP_URLRedirectNotify(NPP instance, const char *url, int32_t status, void *notifyData)
+{
+ PluginObject* obj = static_cast<PluginObject*>(instance->pdata);
+ obj->pluginTest->NPP_URLRedirectNotify(url, status, notifyData);
+}
+
NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value)
{
#ifdef XP_UNIX