Index: content/renderer/browser_plugin/browser_plugin_bindings.cc |
diff --git a/content/renderer/browser_plugin/browser_plugin_bindings.cc b/content/renderer/browser_plugin/browser_plugin_bindings.cc |
index d8c75ad5bece01eaafc258f690db6a230278023b..0e00bfe3f423710863a5efc742d1f6a2aa5bbfe8 100644 |
--- a/content/renderer/browser_plugin/browser_plugin_bindings.cc |
+++ b/content/renderer/browser_plugin/browser_plugin_bindings.cc |
@@ -8,7 +8,6 @@ |
#include <string> |
#include "base/bind.h" |
-#include "base/logging.h" |
#include "base/message_loop.h" |
#include "base/string16.h" |
#include "base/string_split.h" |
@@ -39,6 +38,9 @@ namespace content { |
namespace { |
const char kAddEventListener[] = "addEventListener"; |
+const char kBackMethod[] = "back"; |
+const char kForwardMethod[] = "forward"; |
+const char kGoMethod[] = "go"; |
const char kRemoveEventListener[] = "removeEventListener"; |
const char kSrcAttribute[] = "src"; |
@@ -51,6 +53,18 @@ bool IdentifierIsAddEventListener(NPIdentifier identifier) { |
return WebBindings::getStringIdentifier(kAddEventListener) == identifier; |
} |
+bool IdentifierIsBackMethod(NPIdentifier identifier) { |
+ return WebBindings::getStringIdentifier(kBackMethod) == identifier; |
+} |
+ |
+bool IdentifierIsForwardMethod(NPIdentifier identifier) { |
+ return WebBindings::getStringIdentifier(kForwardMethod) == identifier; |
+} |
+ |
+bool IdentifierIsGoMethod(NPIdentifier identifier) { |
+ return WebBindings::getStringIdentifier(kGoMethod) == identifier; |
+} |
+ |
bool IdentifierIsRemoveEventListener(NPIdentifier identifier) { |
return WebBindings::getStringIdentifier(kRemoveEventListener) == identifier; |
} |
@@ -59,6 +73,16 @@ bool IdentifierIsSrcAttribute(NPIdentifier identifier) { |
return WebBindings::getStringIdentifier(kSrcAttribute) == identifier; |
} |
+int Int32FromNPVariant(const NPVariant& variant) { |
+ if (NPVARIANT_IS_INT32(variant)) |
+ return NPVARIANT_TO_INT32(variant); |
+ |
+ if (NPVARIANT_IS_DOUBLE(variant)) |
+ return NPVARIANT_TO_DOUBLE(variant); |
+ |
+ return 0; |
+} |
+ |
std::string StringFromNPVariant(const NPVariant& variant) { |
if (!NPVARIANT_IS_STRING(variant)) |
return std::string(); |
@@ -109,6 +133,15 @@ bool BrowserPluginBindingsHasMethod(NPObject* np_obj, NPIdentifier name) { |
if (IdentifierIsAddEventListener(name)) |
return true; |
+ if (IdentifierIsBackMethod(name)) |
+ return true; |
+ |
+ if (IdentifierIsForwardMethod(name)) |
+ return true; |
+ |
+ if (IdentifierIsGoMethod(name)) |
+ return true; |
+ |
if (IdentifierIsRemoveEventListener(name)) |
return true; |
@@ -139,6 +172,21 @@ bool BrowserPluginBindingsInvoke(NPObject* np_obj, NPIdentifier name, |
return bindings->instance()->AddEventListener(event_name, function); |
} |
+ if (IdentifierIsBackMethod(name) && !arg_count) { |
+ bindings->instance()->Back(); |
+ return true; |
+ } |
+ |
+ if (IdentifierIsForwardMethod(name) && !arg_count) { |
+ bindings->instance()->Forward(); |
+ return true; |
+ } |
+ |
+ if (IdentifierIsGoMethod(name) && arg_count == 1) { |
+ bindings->instance()->Go(Int32FromNPVariant(args[0])); |
+ return true; |
+ } |
+ |
if (IdentifierIsRemoveEventListener(name) && arg_count == 2) { |
std::string event_name = StringFromNPVariant(args[0]); |
if (event_name.empty()) |
@@ -174,10 +222,6 @@ bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name, |
if (!np_obj) |
return false; |
- if (IdentifierIsAddEventListener(name) || |
- IdentifierIsRemoveEventListener(name)) |
- return false; |
- |
if (IdentifierIsSrcAttribute(name)) { |
BrowserPluginBindings* bindings = GetBindings(np_obj); |
if (!bindings) |