Index: webkit/glue/plugins/plugin_host.cc |
=================================================================== |
--- webkit/glue/plugins/plugin_host.cc (revision 2736) |
+++ webkit/glue/plugins/plugin_host.cc (working copy) |
@@ -5,7 +5,6 @@ |
#include "webkit/glue/plugins/plugin_host.h" |
#include "base/logging.h" |
-#include "base/message_loop.h" |
#include "base/string_util.h" |
#include "webkit/default_plugin/default_plugin_shared.h" |
#include "webkit/glue/glue_util.h" |
@@ -17,29 +16,12 @@ |
#include "webkit/glue/plugins/plugin_stream_url.h" |
#include "third_party/npapi/bindings/npruntime.h" |
-extern "C" { |
-// FindInstance() |
-// Finds a PluginInstance from an NPP. |
-// The caller must take a reference if needed. |
-NPAPI::PluginInstance* FindInstance(NPP id) { |
- if (id == NULL) { |
- NOTREACHED(); |
- return NULL; |
- } |
- |
- return (NPAPI::PluginInstance *)id->ndata; |
-} |
- |
namespace NPAPI |
{ |
scoped_refptr<PluginHost> PluginHost::singleton_; |
-static const int kFlashMessageThrottleDelayMs = 10; |
- |
-PluginHost::PluginHost() |
-#pragma warning(suppress: 4355) // can use this |
- : throttle_factory_(this) { |
+PluginHost::PluginHost() { |
InitializeHostFuncs(); |
} |
@@ -151,78 +133,6 @@ |
host_funcs_.enumerate = overrides->enumerate; |
} |
-void PluginHost::InvalidateRect(NPP id, NPRect* invalidRect) { |
- if (!invalidRect) { |
- NOTREACHED(); |
- return; |
- } |
- |
- // Invalidates specified drawing area prior to repainting or refreshing a |
- // windowless plugin |
- |
- // Before a windowless plugin can refresh part of its drawing area, it must |
- // first invalidate it. This function causes the NPP_HandleEvent method to |
- // pass an update event or a paint message to the plug-in. After calling |
- // this method, the plug-in recieves a paint message asynchronously. |
- |
- // The browser redraws invalid areas of the document and any windowless |
- // plug-ins at regularly timed intervals. To force a paint message, the |
- // plug-in can call NPN_ForceRedraw after calling this method. |
- |
- scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id); |
- DCHECK(plugin.get() != NULL); |
- |
- if (plugin.get() && plugin->webplugin()) { |
- if (!plugin->windowless()) { |
- RECT rect = {0}; |
- rect.left = invalidRect->left; |
- rect.right = invalidRect->right; |
- rect.top = invalidRect->top; |
- rect.bottom = invalidRect->bottom; |
- ::InvalidateRect(plugin->window_handle(), &rect, FALSE); |
- return; |
- } |
- |
- if (plugin->throttle_invalidate()) { |
- // We need to track plugin invalidates on a per instance basis. |
- ThrottledInvalidates plugin_instance_invalidates; |
- InstanceThrottledInvalidatesMap::iterator invalidate_index = |
- instance_throttled_invalidates_.find(id); |
- if (invalidate_index != instance_throttled_invalidates_.end()) { |
- plugin_instance_invalidates = (*invalidate_index).second; |
- } |
- |
- bool throttle_active = |
- (plugin_instance_invalidates.throttled_invalidates.size() > 0); |
- |
- gfx::Rect rect(invalidRect->left, |
- invalidRect->top, |
- invalidRect->right - invalidRect->left, |
- invalidRect->bottom - invalidRect->top); |
- |
- plugin_instance_invalidates.throttled_invalidates.push_back(rect); |
- |
- if (!throttle_active) { |
- // We hold a reference to the plugin instance to avoid race conditions |
- // due to the instance being released before the OnInvalidateRect |
- // function is invoked. |
- plugin->AddRef(); |
- MessageLoop::current()->PostDelayedTask(FROM_HERE, |
- throttle_factory_.NewRunnableMethod(&PluginHost::OnInvalidateRect, |
- id, plugin.get()), |
- kFlashMessageThrottleDelayMs); |
- } |
- instance_throttled_invalidates_[id] = plugin_instance_invalidates; |
- } else { |
- gfx::Rect rect(invalidRect->left, |
- invalidRect->top, |
- invalidRect->right - invalidRect->left, |
- invalidRect->bottom - invalidRect->top); |
- plugin->webplugin()->InvalidateRect(rect); |
- } |
- } |
-} |
- |
bool PluginHost::SetPostData(const char *buf, |
uint32 length, |
std::vector<std::string>* names, |
@@ -325,39 +235,22 @@ |
return !err; |
} |
-void PluginHost::OnInvalidateRect(NPP id, PluginInstance* instance) { |
- if (!instance) { |
- NOTREACHED(); |
- return; |
- } |
+} // namespace NPAPI |
- InstanceThrottledInvalidatesMap::iterator invalidate_index = |
- instance_throttled_invalidates_.find(id); |
- if (invalidate_index == instance_throttled_invalidates_.end()) { |
+extern "C" { |
+ |
+// FindInstance() |
+// Finds a PluginInstance from an NPP. |
+// The caller must take a reference if needed. |
+NPAPI::PluginInstance* FindInstance(NPP id) { |
+ if (id == NULL) { |
NOTREACHED(); |
- instance->Release(); |
- return; |
+ return NULL; |
} |
- ThrottledInvalidates plugin_instance_invalidates = |
- (*invalidate_index).second; |
- |
- if (instance->webplugin()) { |
- for (unsigned int throttle_index = 0; |
- throttle_index < |
- plugin_instance_invalidates.throttled_invalidates.size(); |
- throttle_index++) { |
- instance->webplugin()->InvalidateRect( |
- plugin_instance_invalidates.throttled_invalidates[throttle_index]); |
- } |
- } |
- |
- instance->Release(); |
- instance_throttled_invalidates_.erase(invalidate_index); |
+ return (NPAPI::PluginInstance *)id->ndata; |
} |
-} // namespace NPAPI |
- |
// Allocates memory from the host's memory space. |
void* NPN_MemAlloc(uint32 size) { |
scoped_refptr<NPAPI::PluginHost> host = NPAPI::PluginHost::Singleton(); |
@@ -646,9 +539,30 @@ |
} |
void NPN_InvalidateRect(NPP id, NPRect *invalidRect) { |
- scoped_refptr<NPAPI::PluginHost> host = NPAPI::PluginHost::Singleton(); |
- if (host != NULL) { |
- host->InvalidateRect(id, invalidRect); |
+ // Invalidates specified drawing area prior to repainting or refreshing a |
+ // windowless plugin |
+ |
+ // Before a windowless plugin can refresh part of its drawing area, it must |
+ // first invalidate it. This function causes the NPP_HandleEvent method to |
+ // pass an update event or a paint message to the plug-in. After calling |
+ // this method, the plug-in recieves a paint message asynchronously. |
+ |
+ // The browser redraws invalid areas of the document and any windowless |
+ // plug-ins at regularly timed intervals. To force a paint message, the |
+ // plug-in can call NPN_ForceRedraw after calling this method. |
+ |
+ scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id); |
+ DCHECK(plugin.get() != NULL); |
+ if (plugin.get() && plugin->webplugin()) { |
+ if (invalidRect) { |
+ gfx::Rect rect(invalidRect->left, |
+ invalidRect->top, |
+ invalidRect->right - invalidRect->left, |
+ invalidRect->bottom - invalidRect->top); |
+ plugin->webplugin()->InvalidateRect(rect); |
+ } else { |
+ plugin->webplugin()->Invalidate(); |
+ } |
} |
} |