Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(373)

Side by Side Diff: content/renderer/browser_plugin/browser_plugin_bindings.cc

Issue 10912054: Adding parsing for partition and persistence attributes to the <browser> tag (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/browser_plugin/browser_plugin_bindings.h" 5 #include "content/renderer/browser_plugin/browser_plugin_bindings.h"
6 6
7 #include <cstdlib> 7 #include <cstdlib>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 23 matching lines...) Expand all
34 using WebKit::WebSerializedScriptValue; 34 using WebKit::WebSerializedScriptValue;
35 using WebKit::WebString; 35 using WebKit::WebString;
36 36
37 namespace content { 37 namespace content {
38 38
39 namespace { 39 namespace {
40 40
41 const char kAddEventListener[] = "addEventListener"; 41 const char kAddEventListener[] = "addEventListener";
42 const char kRemoveEventListener[] = "removeEventListener"; 42 const char kRemoveEventListener[] = "removeEventListener";
43 const char kSrcAttribute[] = "src"; 43 const char kSrcAttribute[] = "src";
44 const char kPartitionAttribute[] = "partition";
45 const char kPersistAttribute[] = "persist";
44 46
45 BrowserPluginBindings* GetBindings(NPObject* object) { 47 BrowserPluginBindings* GetBindings(NPObject* object) {
46 return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)-> 48 return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)->
47 message_channel; 49 message_channel;
48 } 50 }
49 51
50 bool IdentifierIsAddEventListener(NPIdentifier identifier) { 52 bool IdentifierIsAddEventListener(NPIdentifier identifier) {
51 return WebBindings::getStringIdentifier(kAddEventListener) == identifier; 53 return WebBindings::getStringIdentifier(kAddEventListener) == identifier;
52 } 54 }
53 55
54 bool IdentifierIsRemoveEventListener(NPIdentifier identifier) { 56 bool IdentifierIsRemoveEventListener(NPIdentifier identifier) {
55 return WebBindings::getStringIdentifier(kRemoveEventListener) == identifier; 57 return WebBindings::getStringIdentifier(kRemoveEventListener) == identifier;
56 } 58 }
57 59
58 bool IdentifierIsSrcAttribute(NPIdentifier identifier) { 60 bool IdentifierIsSrcAttribute(NPIdentifier identifier) {
59 return WebBindings::getStringIdentifier(kSrcAttribute) == identifier; 61 return WebBindings::getStringIdentifier(kSrcAttribute) == identifier;
60 } 62 }
61 63
64 bool IdentifierIsPartitionAttribute(NPIdentifier identifier) {
65 return WebBindings::getStringIdentifier(kPartitionAttribute) == identifier;
66 }
67
68 bool IdentifierIsPersistAttribute(NPIdentifier identifier) {
69 return WebBindings::getStringIdentifier(kPersistAttribute) == identifier;
70 }
71
62 std::string StringFromNPVariant(const NPVariant& variant) { 72 std::string StringFromNPVariant(const NPVariant& variant) {
63 if (!NPVARIANT_IS_STRING(variant)) 73 if (!NPVARIANT_IS_STRING(variant))
64 return std::string(); 74 return std::string();
65 const NPString& np_string = NPVARIANT_TO_STRING(variant); 75 const NPString& np_string = NPVARIANT_TO_STRING(variant);
66 return std::string(np_string.UTF8Characters, np_string.UTF8Length); 76 return std::string(np_string.UTF8Characters, np_string.UTF8Length);
67 } 77 }
68 78
69 string16 String16FromNPVariant(const NPVariant& variant) { 79 string16 String16FromNPVariant(const NPVariant& variant) {
70 if (!NPVARIANT_IS_STRING(variant)) 80 if (!NPVARIANT_IS_STRING(variant))
71 return string16(); 81 return string16();
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 169
160 bool BrowserPluginBindingsInvokeDefault(NPObject* np_obj, 170 bool BrowserPluginBindingsInvokeDefault(NPObject* np_obj,
161 const NPVariant* args, 171 const NPVariant* args,
162 uint32 arg_count, 172 uint32 arg_count,
163 NPVariant* result) { 173 NPVariant* result) {
164 NOTIMPLEMENTED(); 174 NOTIMPLEMENTED();
165 return false; 175 return false;
166 } 176 }
167 177
168 bool BrowserPluginBindingsHasProperty(NPObject* np_obj, NPIdentifier name) { 178 bool BrowserPluginBindingsHasProperty(NPObject* np_obj, NPIdentifier name) {
169 return IdentifierIsSrcAttribute(name); 179 return IdentifierIsSrcAttribute(name) ||
180 IdentifierIsPartitionAttribute(name) ||
181 IdentifierIsPersistAttribute(name);
170 } 182 }
171 183
172 bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name, 184 bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name,
173 NPVariant* result) { 185 NPVariant* result) {
174 if (!np_obj) 186 if (!np_obj)
175 return false; 187 return false;
188 if (!result)
189 return false;
176 190
177 if (IdentifierIsAddEventListener(name) || 191 if (IdentifierIsAddEventListener(name) ||
178 IdentifierIsRemoveEventListener(name)) 192 IdentifierIsRemoveEventListener(name))
179 return false; 193 return false;
180 194
195 // All attributes from here on rely on the bindings, so retrieve it once and
196 // return on failure.
197 BrowserPluginBindings* bindings = GetBindings(np_obj);
198 if (!bindings)
199 return false;
200
181 if (IdentifierIsSrcAttribute(name)) { 201 if (IdentifierIsSrcAttribute(name)) {
182 BrowserPluginBindings* bindings = GetBindings(np_obj);
183 if (!bindings)
184 return false;
185 std::string src = bindings->instance()->GetSrcAttribute(); 202 std::string src = bindings->instance()->GetSrcAttribute();
186 return StringToNPVariant(src, result); 203 return StringToNPVariant(src, result);
187 } 204 }
188 205
206 if (IdentifierIsPartitionAttribute(name)) {
207 std::string partition_id = bindings->instance()->GetPartitionAttribute();
208 return StringToNPVariant(partition_id, result);
209 }
210
211 if (IdentifierIsPersistAttribute(name)) {
212 bool persist = bindings->instance()->GetPersistAttribute();
213 BOOLEAN_TO_NPVARIANT(persist, *result);
214 return true;
215 }
216
189 return false; 217 return false;
190 } 218 }
191 219
192 bool BrowserPluginBindingsSetProperty(NPObject* np_obj, NPIdentifier name, 220 bool BrowserPluginBindingsSetProperty(NPObject* np_obj, NPIdentifier name,
193 const NPVariant* variant) { 221 const NPVariant* variant) {
194 if (!np_obj) 222 if (!np_obj)
195 return false; 223 return false;
224 if (!variant)
225 return false;
226
227 // All attributes from here on rely on the bindings, so retrieve it once and
228 // return on failure.
229 BrowserPluginBindings* bindings = GetBindings(np_obj);
230 if (!bindings)
231 return false;
196 232
197 if (IdentifierIsSrcAttribute(name)) { 233 if (IdentifierIsSrcAttribute(name)) {
198 std::string src = StringFromNPVariant(*variant); 234 std::string src = StringFromNPVariant(*variant);
199 BrowserPluginBindings* bindings = GetBindings(np_obj);
200 if (!bindings)
201 return false;
202 bindings->instance()->SetSrcAttribute(src); 235 bindings->instance()->SetSrcAttribute(src);
203 return true; 236 return true;
204 } 237 }
238
239 if (IdentifierIsPartitionAttribute(name)) {
240 std::string partition_id = StringFromNPVariant(*variant);
241 return bindings->instance()->SetPartitionAttribute(partition_id);
242 }
243
244 if (IdentifierIsPersistAttribute(name)) {
245 bool persist = NPVARIANT_TO_BOOLEAN(*variant);
246 return bindings->instance()->SetPersistAttribute(persist);
247 }
248
205 return false; 249 return false;
206 } 250 }
207 251
208 bool BrowserPluginBindingsEnumerate(NPObject *np_obj, NPIdentifier **value, 252 bool BrowserPluginBindingsEnumerate(NPObject *np_obj, NPIdentifier **value,
209 uint32_t *count) { 253 uint32_t *count) {
210 NOTIMPLEMENTED(); 254 NOTIMPLEMENTED();
211 return true; 255 return true;
212 } 256 }
213 257
214 NPClass browser_plugin_message_class = { 258 NPClass browser_plugin_message_class = {
(...skipping 29 matching lines...) Expand all
244 WebBindings::createObject(NULL, &browser_plugin_message_class); 288 WebBindings::createObject(NULL, &browser_plugin_message_class);
245 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj); 289 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj);
246 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr(); 290 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr();
247 } 291 }
248 292
249 BrowserPluginBindings::~BrowserPluginBindings() { 293 BrowserPluginBindings::~BrowserPluginBindings() {
250 WebBindings::releaseObject(np_object_); 294 WebBindings::releaseObject(np_object_);
251 } 295 }
252 296
253 } // namespace content 297 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698