Title: [127047] trunk
Revision
127047
Author
[email protected]
Date
2012-08-29 13:58:56 -0700 (Wed, 29 Aug 2012)

Log Message

REGRESSION: Not sending NPP_SetWindow is causing Flash to not throttle itself
<rdar://problem/12133021> and https://bugs.webkit.org/show_bug.cgi?id=95274

Reviewed by Sam Weinig.

Source/WebKit2:

* UIProcess/API/mac/WKView.mm:
(-[WKView viewDidMoveToWindow]): Previously we'd only update window visibility when the window is hidden.
  Now we also update window visibility when the window is shown.

* WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
(WebKit::NetscapePlugin::callSetWindowInvisible): Call set window with a manufactured empty clip rect to tell
  the plug-in that it is complete hidden.
(WebKit):
* WebProcess/Plugins/Netscape/NetscapePlugin.h:
(NetscapePlugin):
* WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
(WebKit::NetscapePlugin::windowVisibilityChanged): Call "callSetWindow" or "callSetWindowInvisible" as appropriate.

* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::setWindowIsVisible): Tell the plugin that its visibility changed.
(WebKit::PluginView::viewGeometryDidChange): Grab a clip rect that - although incorrect - at least is correct if
  the PluginView is completely hidden.

Tools:

Add a test plug-in that calls back into the page with info on the NPWindow passed
in to NPP_SetWindow.

* DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
* DumpRenderTree/TestNetscapePlugIn/Tests/LogNPPSetWindow.cpp: Added.
(LogNPPSetWindow):
(LogNPPSetWindow::LogNPPSetWindow):
(LogNPPSetWindow::NPP_SetWindow):

LayoutTests:

* platform/mac-wk2/plugins/npp-setwindow-called-on-scroll-expected.txt: Added.
* platform/mac-wk2/plugins/npp-setwindow-called-on-scroll.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (127046 => 127047)


--- trunk/LayoutTests/ChangeLog	2012-08-29 20:55:27 UTC (rev 127046)
+++ trunk/LayoutTests/ChangeLog	2012-08-29 20:58:56 UTC (rev 127047)
@@ -1,3 +1,13 @@
+2012-08-29  Brady Eidson  <[email protected]>
+
+        REGRESSION: Not sending NPP_SetWindow is causing Flash to not throttle itself
+        <rdar://problem/12133021> and https://bugs.webkit.org/show_bug.cgi?id=95274
+
+        Reviewed by Sam Weinig.
+
+        * platform/mac-wk2/plugins/npp-setwindow-called-on-scroll-expected.txt: Added.
+        * platform/mac-wk2/plugins/npp-setwindow-called-on-scroll.html: Added.
+
 2012-08-29  Alexandru Chiculita  <[email protected]>
 
         [CSS Shaders] Use CSS transform parsing code within CSS Shader

Added: trunk/LayoutTests/platform/mac-wk2/plugins/npp-setwindow-called-on-scroll-expected.txt (0 => 127047)


--- trunk/LayoutTests/platform/mac-wk2/plugins/npp-setwindow-called-on-scroll-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/mac-wk2/plugins/npp-setwindow-called-on-scroll-expected.txt	2012-08-29 20:58:56 UTC (rev 127047)
@@ -0,0 +1,15 @@
+a div
+
+another div
+Tests that netscape plugins get appropriate calls to NPP_SetWindow when scrolled out of view or back in to view.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS NPP_SetWindow called with expected parameters
+PASS NPP_SetWindow called with expected parameters
+PASS NPP_SetWindow called with expected parameters
+PASS NPP_SetWindow called with expected parameters
+PASS NPP_SetWindow called with expected parameters
+PASS NPP_SetWindow called with expected parameters
+

Added: trunk/LayoutTests/platform/mac-wk2/plugins/npp-setwindow-called-on-scroll.html (0 => 127047)


--- trunk/LayoutTests/platform/mac-wk2/plugins/npp-setwindow-called-on-scroll.html	                        (rev 0)
+++ trunk/LayoutTests/platform/mac-wk2/plugins/npp-setwindow-called-on-scroll.html	2012-08-29 20:58:56 UTC (rev 127047)
@@ -0,0 +1,62 @@
+<head>
+<script src=""
+<script>
+if (window.testRunner) {
+    testRunner.dumpAsText();
+    testRunner.waitUntilDone();
+}
+
+window.resizeTo(200,500);
+
+var windowWasSetCount = 0;
+
+var windowWasSetCommands = [
+    null, // The plug-in gets setWindow called explicitly during initialization, the clip rect should be empty.
+    null, // The plug-in gets setWindow called during initialization as a side effect of being told its window is visible, the clip rect should be empty.
+    "window.scrollTo(0, 700)",  // This should scroll the plug-in partially into view, the clip rect should be non-empty.
+    "window.scrollTo(0, 0)",    // This should scroll the plug-in back out of view, the clip rect should be empty.
+    "window.scrollTo(0, 1000)", // This should scroll the plug-in fully into view, the clip rect should be non-empty.
+    "window.scrollTo(0, 1300)", // This should scroll the plug-in back out of view, the clip rect should be empty.
+    "finishTest()"];
+
+// Note: These expected results will change once https://bugs.webkit.org/show_bug.cgi?id=95274 is resolved.
+var windowWasSetExpectedResults = [
+    "NPP_SetWindow: NULL window, Rect {0, 0, 200, 100}, Clip Rect {0, 0, 0, 0}, Type 2", 
+    "NPP_SetWindow: NULL window, Rect {0, 0, 200, 100}, Clip Rect {0, 0, 0, 0}, Type 2", 
+    "NPP_SetWindow: NULL window, Rect {0, 0, 200, 100}, Clip Rect {0, 0, 200, 100}, Type 2", 
+    "NPP_SetWindow: NULL window, Rect {0, 0, 200, 100}, Clip Rect {0, 0, 0, 0}, Type 2", 
+    "NPP_SetWindow: NULL window, Rect {0, 0, 200, 100}, Clip Rect {0, 0, 200, 100}, Type 2", 
+    "NPP_SetWindow: NULL window, Rect {0, 0, 200, 100}, Clip Rect {0, 0, 0, 0}, Type 2"];
+    
+function windowWasSet(msg)
+{
+    if (msg == windowWasSetExpectedResults[windowWasSetCount])
+        testPassed("NPP_SetWindow called with expected parameters");
+    else
+        testFailed("NPP_SetWindow called with: " + msg + " but we expected " + windowWasSetExpectedResults[windowWasSetCount] + "... Maybe bug 95362 has been fixed?");
+
+    ++windowWasSetCount;    
+    if (windowWasSetCommands[windowWasSetCount])
+        eval(windowWasSetCommands[windowWasSetCount]);
+}
+
+function finishTest()
+{
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+
+</script>
+
+</head>
+<body style="margin:0 0 0 0;">
+<div style="width:200px; height:1000px; background-color:red;">a div</div>
+<embed id="TestElement" type="application/x-webkit-test-netscape" test="log-npp-set-window" style="width:200px; height:100px; background-color:yellow;"></embed>
+<div style="width:200px; height:1000px; background-color:red;">another div</div>
+<p id="description"></p>
+<div id="console"></div>
+</body>
+
+<script>
+description("Tests that netscape plugins get appropriate calls to NPP_SetWindow when scrolled out of view or back in to view.");
+</script>

Modified: trunk/Source/WebKit2/ChangeLog (127046 => 127047)


--- trunk/Source/WebKit2/ChangeLog	2012-08-29 20:55:27 UTC (rev 127046)
+++ trunk/Source/WebKit2/ChangeLog	2012-08-29 20:58:56 UTC (rev 127047)
@@ -1,3 +1,28 @@
+2012-08-29  Brady Eidson  <[email protected]>
+
+        REGRESSION: Not sending NPP_SetWindow is causing Flash to not throttle itself
+        <rdar://problem/12133021> and https://bugs.webkit.org/show_bug.cgi?id=95274
+
+        Reviewed by Sam Weinig.
+
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView viewDidMoveToWindow]): Previously we'd only update window visibility when the window is hidden.
+          Now we also update window visibility when the window is shown.
+
+        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
+        (WebKit::NetscapePlugin::callSetWindowInvisible): Call set window with a manufactured empty clip rect to tell
+          the plug-in that it is complete hidden.
+        (WebKit):
+        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
+        (NetscapePlugin):
+        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
+        (WebKit::NetscapePlugin::windowVisibilityChanged): Call "callSetWindow" or "callSetWindowInvisible" as appropriate.
+
+        * WebProcess/Plugins/PluginView.cpp:
+        (WebKit::PluginView::setWindowIsVisible): Tell the plugin that its visibility changed.
+        (WebKit::PluginView::viewGeometryDidChange): Grab a clip rect that - although incorrect - at least is correct if
+          the PluginView is completely hidden.
+
 2012-08-29  Jon Lee  <[email protected]>
 
         Build patch for Qt

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (127046 => 127047)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2012-08-29 20:55:27 UTC (rev 127046)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2012-08-29 20:58:56 UTC (rev 127047)
@@ -1937,6 +1937,7 @@
 
         [self _accessibilityRegisterUIProcessTokens];
     } else {
+        [self _updateWindowVisibility];
         _data->_page->viewStateDidChange(WebPageProxy::ViewIsVisible);
         _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive | WebPageProxy::ViewIsInWindow);
 

Modified: trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp (127046 => 127047)


--- trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp	2012-08-29 20:55:27 UTC (rev 127046)
+++ trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp	2012-08-29 20:58:56 UTC (rev 127047)
@@ -510,6 +510,20 @@
     m_hasCalledSetWindow = true;
 }
 
+void NetscapePlugin::callSetWindowInvisible()
+{
+    NPWindow invisibleWindow = m_npWindow;
+    
+    invisibleWindow.window = 0;
+    invisibleWindow.clipRect.top = 0;
+    invisibleWindow.clipRect.left = 0;
+    invisibleWindow.clipRect.bottom = 0;
+    invisibleWindow.clipRect.right = 0;
+    
+    NPP_SetWindow(&invisibleWindow);
+    m_hasCalledSetWindow = true;
+}
+
 bool NetscapePlugin::shouldLoadSrcURL()
 {
     // Check if we should cancel the load

Modified: trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h (127046 => 127047)


--- trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h	2012-08-29 20:55:27 UTC (rev 127046)
+++ trunk/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h	2012-08-29 20:58:56 UTC (rev 127047)
@@ -147,6 +147,7 @@
     NetscapePlugin(PassRefPtr<NetscapePluginModule> pluginModule);
 
     void callSetWindow();
+    void callSetWindowInvisible();
     bool shouldLoadSrcURL();
     NetscapePluginStream* streamFromID(uint64_t streamID);
     void stopAllStreams();

Modified: trunk/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm (127046 => 127047)


--- trunk/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm	2012-08-29 20:55:27 UTC (rev 127046)
+++ trunk/Source/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm	2012-08-29 20:58:56 UTC (rev 127047)
@@ -914,9 +914,12 @@
     }
 }
     
-void NetscapePlugin::windowVisibilityChanged(bool)
+void NetscapePlugin::windowVisibilityChanged(bool visible)
 {
-    // FIXME: Implement.
+    if (visible)
+        callSetWindow();
+    else
+        callSetWindowInvisible();
 }
 
 uint64_t NetscapePlugin::pluginComplexTextInputIdentifier() const

Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp (127046 => 127047)


--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp	2012-08-29 20:55:27 UTC (rev 127046)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp	2012-08-29 20:58:56 UTC (rev 127047)
@@ -410,7 +410,7 @@
     if (!m_plugin)
         return;
 
-    // FIXME: Implement.
+    m_plugin->windowVisibilityChanged(windowIsVisible);
 }
 
 void PluginView::setWindowIsFocused(bool windowIsFocused)
@@ -785,8 +785,13 @@
     transform.translate(scaledLocationInRootViewCoordinates.x(), scaledLocationInRootViewCoordinates.y());
     transform.scale(pageScaleFactor);
 
-    // FIXME: The clip rect isn't correct.
-    IntRect clipRect = boundsRect();
+    // FIXME: This clip rect isn't correct.
+    // But it is still important distinguish between empty and non-empty rects so we can notify the plug-in when it becomes invisible.
+    // Making the rect actually correct is covered by https://bugs.webkit.org/show_bug.cgi?id=95362
+    IntRect clipRect = clipRectInWindowCoordinates();
+    if (!clipRect.isEmpty())
+        clipRect = boundsRect();
+        
     m_plugin->geometryDidChange(size(), clipRect, transform);
 }
 

Modified: trunk/Tools/ChangeLog (127046 => 127047)


--- trunk/Tools/ChangeLog	2012-08-29 20:55:27 UTC (rev 127046)
+++ trunk/Tools/ChangeLog	2012-08-29 20:58:56 UTC (rev 127047)
@@ -1,3 +1,19 @@
+2012-08-29  Brady Eidson  <[email protected]>
+
+        REGRESSION: Not sending NPP_SetWindow is causing Flash to not throttle itself
+        <rdar://problem/12133021> and https://bugs.webkit.org/show_bug.cgi?id=95274
+
+        Reviewed by Sam Weinig.
+
+        Add a test plug-in that calls back into the page with info on the NPWindow passed
+        in to NPP_SetWindow.
+
+        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
+        * DumpRenderTree/TestNetscapePlugIn/Tests/LogNPPSetWindow.cpp: Added.
+        (LogNPPSetWindow):
+        (LogNPPSetWindow::LogNPPSetWindow):
+        (LogNPPSetWindow::NPP_SetWindow):
+
 2012-08-29  Jon Lee  <[email protected]>
 
         [Mac] Basic DRT support for web notifications

Modified: trunk/Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj (127046 => 127047)


--- trunk/Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj	2012-08-29 20:55:27 UTC (rev 127046)
+++ trunk/Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj	2012-08-29 20:58:56 UTC (rev 127047)
@@ -70,6 +70,7 @@
 		4437730F125CBC4D00AAE02C /* WebArchiveDumpSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 44A997820FCDE86400580F10 /* WebArchiveDumpSupport.h */; };
 		4AD6A11413C8124000EA9737 /* FormValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AD6A11313C8124000EA9737 /* FormValue.cpp */; };
 		5106803E15CC7B10001A8A23 /* SlowNPPNew.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5106803D15CC7B10001A8A23 /* SlowNPPNew.cpp */; };
+		515C0CD015EE785700F5A613 /* LogNPPSetWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 515C0CCF15EE785700F5A613 /* LogNPPSetWindow.cpp */; };
 		515F429C15C07872007C8F90 /* PluginScriptableObjectOverridesAllProperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 515F429B15C07872007C8F90 /* PluginScriptableObjectOverridesAllProperties.cpp */; };
 		5185F6B210714E07007AA393 /* HistoryDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5185F69F10714A57007AA393 /* HistoryDelegate.mm */; };
 		5185F6B310714E12007AA393 /* HistoryDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5185F69E10714A57007AA393 /* HistoryDelegate.h */; };
@@ -285,6 +286,7 @@
 		44A997830FCDE86400580F10 /* WebArchiveDumpSupport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebArchiveDumpSupport.cpp; path = cf/WebArchiveDumpSupport.cpp; sourceTree = "<group>"; };
 		4AD6A11313C8124000EA9737 /* FormValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FormValue.cpp; sourceTree = "<group>"; };
 		5106803D15CC7B10001A8A23 /* SlowNPPNew.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SlowNPPNew.cpp; path = TestNetscapePlugIn/Tests/SlowNPPNew.cpp; sourceTree = SOURCE_ROOT; };
+		515C0CCF15EE785700F5A613 /* LogNPPSetWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LogNPPSetWindow.cpp; sourceTree = "<group>"; };
 		515F429B15C07872007C8F90 /* PluginScriptableObjectOverridesAllProperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PluginScriptableObjectOverridesAllProperties.cpp; sourceTree = "<group>"; };
 		5185F69E10714A57007AA393 /* HistoryDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HistoryDelegate.h; path = mac/HistoryDelegate.h; sourceTree = "<group>"; };
 		5185F69F10714A57007AA393 /* HistoryDelegate.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = HistoryDelegate.mm; path = mac/HistoryDelegate.mm; sourceTree = "<group>"; };
@@ -555,6 +557,7 @@
 				1A5CC1F3137DD2EC00A5D7E7 /* GetURLWithJavaScriptURL.cpp */,
 				1A3E28A91311D73B00501349 /* GetURLWithJavaScriptURLDestroyingPlugin.cpp */,
 				1AD4CB2012A6D1350027A7AF /* GetUserAgentWithNullNPPFromNPPNew.cpp */,
+				515C0CCF15EE785700F5A613 /* LogNPPSetWindow.cpp */,
 				1ACF898B132EF41C00E915D4 /* NPDeallocateCalledBeforeNPShutdown.cpp */,
 				C031182A134E4A2B00919757 /* NPPSetWindowCalledDuringDestruction.cpp */,
 				1A24BAA8120734EE00FBB059 /* NPRuntimeObjectFromDestroyedPlugin.cpp */,
@@ -917,6 +920,7 @@
 				515F429C15C07872007C8F90 /* PluginScriptableObjectOverridesAllProperties.cpp in Sources */,
 				5106803E15CC7B10001A8A23 /* SlowNPPNew.cpp in Sources */,
 				51CACBD815D96FD000EB53A2 /* EvaluateJSWithinNPP_New.cpp in Sources */,
+				515C0CD015EE785700F5A613 /* LogNPPSetWindow.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

Added: trunk/Tools/DumpRenderTree/TestNetscapePlugIn/Tests/LogNPPSetWindow.cpp (0 => 127047)


--- trunk/Tools/DumpRenderTree/TestNetscapePlugIn/Tests/LogNPPSetWindow.cpp	                        (rev 0)
+++ trunk/Tools/DumpRenderTree/TestNetscapePlugIn/Tests/LogNPPSetWindow.cpp	2012-08-29 20:58:56 UTC (rev 127047)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2012 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"
+
+using namespace std;
+
+class LogNPPSetWindow : public PluginTest {
+public:
+    LogNPPSetWindow(NPP, const string& identifier);
+
+private:
+    virtual NPError NPP_SetWindow(NPWindow*);
+};
+
+LogNPPSetWindow::LogNPPSetWindow(NPP npp, const string& identifier)
+    : PluginTest(npp, identifier)
+{
+}
+
+NPError LogNPPSetWindow::NPP_SetWindow(NPWindow* window)
+{
+    char message[1024];
+    snprintf(message, 1024, "NPP_SetWindow: %s window, Rect {%i, %i, %i, %i}, Clip Rect {%i, %i, %i, %i}, Type %i",
+        window->window ? "non-NULL" : "NULL", window->x, window->y, window->width, window->height,
+        window->clipRect.left, window->clipRect.top, window->clipRect.right, window->clipRect.bottom,
+        window->type);
+    
+    char script[1536];
+    snprintf(script, 1536, "window.setTimeout('windowWasSet(\"%s\");', 0);", message);
+
+    executeScript(script);
+
+    return NPERR_NO_ERROR;
+}
+
+static PluginTest::Register<LogNPPSetWindow> registrar("log-npp-set-window");
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to