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..2fb21bd6bbeba13e838485664ae527c4af577c37 100644 |
--- a/content/renderer/browser_plugin/browser_plugin_bindings.cc |
+++ b/content/renderer/browser_plugin/browser_plugin_bindings.cc |
@@ -41,6 +41,7 @@ namespace { |
const char kAddEventListener[] = "addEventListener"; |
const char kRemoveEventListener[] = "removeEventListener"; |
const char kSrcAttribute[] = "src"; |
+const char kPartitionAttribute[] = "partition"; |
BrowserPluginBindings* GetBindings(NPObject* object) { |
return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)-> |
@@ -59,6 +60,10 @@ bool IdentifierIsSrcAttribute(NPIdentifier identifier) { |
return WebBindings::getStringIdentifier(kSrcAttribute) == identifier; |
} |
+bool IdentifierIsPartitionAttribute(NPIdentifier identifier) { |
+ return WebBindings::getStringIdentifier(kPartitionAttribute) == identifier; |
+} |
+ |
std::string StringFromNPVariant(const NPVariant& variant) { |
if (!NPVARIANT_IS_STRING(variant)) |
return std::string(); |
@@ -166,7 +171,8 @@ bool BrowserPluginBindingsInvokeDefault(NPObject* np_obj, |
} |
bool BrowserPluginBindingsHasProperty(NPObject* np_obj, NPIdentifier name) { |
- return IdentifierIsSrcAttribute(name); |
+ return IdentifierIsSrcAttribute(name) || |
+ IdentifierIsPartitionAttribute(name); |
} |
bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name, |
@@ -174,18 +180,29 @@ bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name, |
if (!np_obj) |
return false; |
+ if (!result) |
+ return false; |
+ |
if (IdentifierIsAddEventListener(name) || |
IdentifierIsRemoveEventListener(name)) |
return false; |
+ // All attributes from here on rely on the bindings, so retrieve it once and |
+ // return on failure. |
+ BrowserPluginBindings* bindings = GetBindings(np_obj); |
+ if (!bindings) |
+ return false; |
+ |
if (IdentifierIsSrcAttribute(name)) { |
- BrowserPluginBindings* bindings = GetBindings(np_obj); |
- if (!bindings) |
- return false; |
std::string src = bindings->instance()->GetSrcAttribute(); |
return StringToNPVariant(src, result); |
} |
+ if (IdentifierIsPartitionAttribute(name)) { |
+ std::string partition_id = bindings->instance()->GetPartitionAttribute(); |
+ return StringToNPVariant(partition_id, result); |
+ } |
+ |
return false; |
} |
@@ -193,15 +210,33 @@ bool BrowserPluginBindingsSetProperty(NPObject* np_obj, NPIdentifier name, |
const NPVariant* variant) { |
if (!np_obj) |
return false; |
+ if (!variant) |
+ return false; |
+ |
+ // All attributes from here on rely on the bindings, so retrieve it once and |
+ // return on failure. |
+ BrowserPluginBindings* bindings = GetBindings(np_obj); |
+ if (!bindings) |
+ return false; |
if (IdentifierIsSrcAttribute(name)) { |
std::string src = StringFromNPVariant(*variant); |
- BrowserPluginBindings* bindings = GetBindings(np_obj); |
- if (!bindings) |
- return false; |
bindings->instance()->SetSrcAttribute(src); |
return true; |
} |
+ |
+ if (IdentifierIsPartitionAttribute(name)) { |
+ std::string partition_id = StringFromNPVariant(*variant); |
+ std::string error_message; |
+ if (!bindings->instance()->SetPartitionAttribute(partition_id, |
+ error_message)) { |
+ WebBindings::setException( |
+ np_obj, static_cast<const NPUTF8 *>(error_message.c_str())); |
+ return false; |
+ } |
+ return true; |
+ } |
+ |
return false; |
} |