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

Unified Diff: webkit/plugins/npapi/test/plugin_windowless_test.cc

Issue 10855141: Fix race condition with windowless plugin buffers. The problem, which is already fixed for Mac, is … (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/plugins/npapi/test/plugin_windowless_test.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/plugins/npapi/test/plugin_windowless_test.cc
===================================================================
--- webkit/plugins/npapi/test/plugin_windowless_test.cc (revision 151213)
+++ webkit/plugins/npapi/test/plugin_windowless_test.cc (working copy)
@@ -11,6 +11,8 @@
#if defined(OS_MACOSX)
#include <ApplicationServices/ApplicationServices.h>
#include <Carbon/Carbon.h>
+#elif defined(TOOLKIT_GTK)
+#include <gdk/gdkx.h>
#endif
namespace NPAPIClient {
@@ -18,9 +20,14 @@
// Remember the first plugin instance for tests involving multiple instances
WindowlessPluginTest* g_other_instance = NULL;
+void OnFinishTest(void* data) {
+ static_cast<WindowlessPluginTest*>(data)->SignalTestCompleted();
+}
+
WindowlessPluginTest::WindowlessPluginTest(NPP id,
NPNetscapeFuncs *host_functions)
- : PluginTest(id, host_functions) {
+ : PluginTest(id, host_functions),
+ paint_counter_(0) {
if (!g_other_instance)
g_other_instance = this;
}
@@ -30,6 +37,8 @@
return WM_PAINT == np_event->event;
#elif defined(OS_MACOSX)
return np_event->what == updateEvt;
+#elif defined(TOOLKIT_GTK)
+ return np_event->type == GraphicsExpose;
#else
NOTIMPLEMENTED();
return false;
@@ -72,7 +81,6 @@
}
int16 WindowlessPluginTest::HandleEvent(void* event) {
-
NPNetscapeFuncs* browser = NPAPIClient::PluginClient::HostFunctions();
NPBool supports_windowless = 0;
@@ -86,6 +94,7 @@
NPEvent* np_event = reinterpret_cast<NPEvent*>(event);
if (IsPaintEvent(np_event)) {
+ paint_counter_++;
#if defined(OS_WIN)
HDC paint_dc = reinterpret_cast<HDC>(np_event->wParam);
if (paint_dc == NULL) {
@@ -109,6 +118,19 @@
ExecuteScriptDeleteInPaint(browser);
} else if (test_name() == "multiple_instances_sync_calls") {
MultipleInstanceSyncCalls(browser);
+ } else if (test_name() == "resize_during_paint") {
+ if (paint_counter_ == 1) {
+ // So that we get another paint later.
+ browser->invalidaterect(id(), NULL);
+ } else if (paint_counter_ == 2) {
+ // Do this in the second paint since that's asynchronous. The first will
+ // be async and WebKit will assert that style recalc doesn't occur while
+ // _it's_ painting (as opposed to the plugin).
Tom Hudson 2012/08/15 17:04:00 Nit: I'd like to understand this, but I don't foll
jam 2012/08/15 17:28:11 my bad, I was lazy and wrote a comment that I myse
Tom Hudson 2012/08/15 17:59:04 So there are two paints, and both are asynchronous
jam 2012/08/15 18:22:22 that was a typo, check out the update
+ ExecuteScriptResizeInPaint(browser);
+
+ // So that we can exit later.
+ browser->pluginthreadasynccall(id(), OnFinishTest, this);
+ }
}
#if defined(OS_MACOSX)
} else if (IsWindowActivationEvent(np_event) &&
@@ -159,6 +181,11 @@
SignalTestCompleted();
}
+void WindowlessPluginTest::ExecuteScriptResizeInPaint(
+ NPNetscapeFuncs* browser) {
+ ExecuteScript(browser, id(), "ResizePluginWithinScript();", NULL);
+}
+
void WindowlessPluginTest::MultipleInstanceSyncCalls(NPNetscapeFuncs* browser) {
if (this == g_other_instance)
return;
« no previous file with comments | « webkit/plugins/npapi/test/plugin_windowless_test.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698