| 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;
|
| }
|
|
|
|
|