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..b6f353d1689847b7398c822d2de2d8add7d19aa8 100644 |
--- a/content/renderer/browser_plugin/browser_plugin_bindings.cc |
+++ b/content/renderer/browser_plugin/browser_plugin_bindings.cc |
@@ -41,6 +41,8 @@ namespace { |
const char kAddEventListener[] = "addEventListener"; |
const char kRemoveEventListener[] = "removeEventListener"; |
const char kSrcAttribute[] = "src"; |
+const char kPartitionAttribute[] = "partition"; |
+const char kPersistAttribute[] = "persist"; |
BrowserPluginBindings* GetBindings(NPObject* object) { |
return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)-> |
@@ -59,6 +61,14 @@ bool IdentifierIsSrcAttribute(NPIdentifier identifier) { |
return WebBindings::getStringIdentifier(kSrcAttribute) == identifier; |
} |
+bool IdentifierIsPartitionAttribute(NPIdentifier identifier) { |
+ return WebBindings::getStringIdentifier(kPartitionAttribute) == identifier; |
+} |
+ |
+bool IdentifierIsPersistAttribute(NPIdentifier identifier) { |
+ return WebBindings::getStringIdentifier(kPersistAttribute) == identifier; |
+} |
+ |
std::string StringFromNPVariant(const NPVariant& variant) { |
if (!NPVARIANT_IS_STRING(variant)) |
return std::string(); |
@@ -166,26 +176,44 @@ bool BrowserPluginBindingsInvokeDefault(NPObject* np_obj, |
} |
bool BrowserPluginBindingsHasProperty(NPObject* np_obj, NPIdentifier name) { |
- return IdentifierIsSrcAttribute(name); |
+ return IdentifierIsSrcAttribute(name) || |
+ IdentifierIsPartitionAttribute(name) || |
+ IdentifierIsPersistAttribute(name); |
} |
bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name, |
NPVariant* result) { |
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); |
+ } |
+ |
+ if (IdentifierIsPersistAttribute(name)) { |
+ bool persist = bindings->instance()->GetPersistAttribute(); |
+ BOOLEAN_TO_NPVARIANT(persist, *result); |
+ return true; |
+ } |
+ |
return false; |
} |
@@ -193,15 +221,31 @@ 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); |
+ return bindings->instance()->SetPartitionAttribute(partition_id); |
+ } |
+ |
+ if (IdentifierIsPersistAttribute(name)) { |
+ bool persist = NPVARIANT_TO_BOOLEAN(*variant); |
+ return bindings->instance()->SetPersistAttribute(persist); |
+ } |
+ |
return false; |
} |