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

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

Issue 10928237: Add support for parsing a 'partition' attribute on the <browser> tag. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moving to UTF-8 encoded strings and added test for multibyte characters. 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";
44 45
45 BrowserPluginBindings* GetBindings(NPObject* object) { 46 BrowserPluginBindings* GetBindings(NPObject* object) {
46 return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)-> 47 return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)->
47 message_channel; 48 message_channel;
48 } 49 }
49 50
50 bool IdentifierIsAddEventListener(NPIdentifier identifier) { 51 bool IdentifierIsAddEventListener(NPIdentifier identifier) {
51 return WebBindings::getStringIdentifier(kAddEventListener) == identifier; 52 return WebBindings::getStringIdentifier(kAddEventListener) == identifier;
52 } 53 }
53 54
54 bool IdentifierIsRemoveEventListener(NPIdentifier identifier) { 55 bool IdentifierIsRemoveEventListener(NPIdentifier identifier) {
55 return WebBindings::getStringIdentifier(kRemoveEventListener) == identifier; 56 return WebBindings::getStringIdentifier(kRemoveEventListener) == identifier;
56 } 57 }
57 58
58 bool IdentifierIsSrcAttribute(NPIdentifier identifier) { 59 bool IdentifierIsSrcAttribute(NPIdentifier identifier) {
59 return WebBindings::getStringIdentifier(kSrcAttribute) == identifier; 60 return WebBindings::getStringIdentifier(kSrcAttribute) == identifier;
60 } 61 }
61 62
63 bool IdentifierIsPartitionAttribute(NPIdentifier identifier) {
64 return WebBindings::getStringIdentifier(kPartitionAttribute) == identifier;
65 }
66
62 std::string StringFromNPVariant(const NPVariant& variant) { 67 std::string StringFromNPVariant(const NPVariant& variant) {
63 if (!NPVARIANT_IS_STRING(variant)) 68 if (!NPVARIANT_IS_STRING(variant))
64 return std::string(); 69 return std::string();
65 const NPString& np_string = NPVARIANT_TO_STRING(variant); 70 const NPString& np_string = NPVARIANT_TO_STRING(variant);
66 return std::string(np_string.UTF8Characters, np_string.UTF8Length); 71 return std::string(np_string.UTF8Characters, np_string.UTF8Length);
67 } 72 }
68 73
69 string16 String16FromNPVariant(const NPVariant& variant) { 74 string16 String16FromNPVariant(const NPVariant& variant) {
70 if (!NPVARIANT_IS_STRING(variant)) 75 if (!NPVARIANT_IS_STRING(variant))
71 return string16(); 76 return string16();
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 164
160 bool BrowserPluginBindingsInvokeDefault(NPObject* np_obj, 165 bool BrowserPluginBindingsInvokeDefault(NPObject* np_obj,
161 const NPVariant* args, 166 const NPVariant* args,
162 uint32 arg_count, 167 uint32 arg_count,
163 NPVariant* result) { 168 NPVariant* result) {
164 NOTIMPLEMENTED(); 169 NOTIMPLEMENTED();
165 return false; 170 return false;
166 } 171 }
167 172
168 bool BrowserPluginBindingsHasProperty(NPObject* np_obj, NPIdentifier name) { 173 bool BrowserPluginBindingsHasProperty(NPObject* np_obj, NPIdentifier name) {
169 return IdentifierIsSrcAttribute(name); 174 return IdentifierIsSrcAttribute(name) ||
175 IdentifierIsPartitionAttribute(name);
170 } 176 }
171 177
172 bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name, 178 bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name,
173 NPVariant* result) { 179 NPVariant* result) {
174 if (!np_obj) 180 if (!np_obj)
175 return false; 181 return false;
176 182
183 if (!result)
184 return false;
185
177 if (IdentifierIsAddEventListener(name) || 186 if (IdentifierIsAddEventListener(name) ||
178 IdentifierIsRemoveEventListener(name)) 187 IdentifierIsRemoveEventListener(name))
179 return false; 188 return false;
180 189
190 // All attributes from here on rely on the bindings, so retrieve it once and
191 // return on failure.
192 BrowserPluginBindings* bindings = GetBindings(np_obj);
193 if (!bindings)
194 return false;
195
181 if (IdentifierIsSrcAttribute(name)) { 196 if (IdentifierIsSrcAttribute(name)) {
182 BrowserPluginBindings* bindings = GetBindings(np_obj);
183 if (!bindings)
184 return false;
185 std::string src = bindings->instance()->GetSrcAttribute(); 197 std::string src = bindings->instance()->GetSrcAttribute();
186 return StringToNPVariant(src, result); 198 return StringToNPVariant(src, result);
187 } 199 }
188 200
201 if (IdentifierIsPartitionAttribute(name)) {
202 std::string partition_id = bindings->instance()->GetPartitionAttribute();
203 return StringToNPVariant(partition_id, result);
204 }
205
189 return false; 206 return false;
190 } 207 }
191 208
192 bool BrowserPluginBindingsSetProperty(NPObject* np_obj, NPIdentifier name, 209 bool BrowserPluginBindingsSetProperty(NPObject* np_obj, NPIdentifier name,
193 const NPVariant* variant) { 210 const NPVariant* variant) {
194 if (!np_obj) 211 if (!np_obj)
195 return false; 212 return false;
213 if (!variant)
214 return false;
215
216 // All attributes from here on rely on the bindings, so retrieve it once and
217 // return on failure.
218 BrowserPluginBindings* bindings = GetBindings(np_obj);
219 if (!bindings)
220 return false;
196 221
197 if (IdentifierIsSrcAttribute(name)) { 222 if (IdentifierIsSrcAttribute(name)) {
198 std::string src = StringFromNPVariant(*variant); 223 std::string src = StringFromNPVariant(*variant);
199 BrowserPluginBindings* bindings = GetBindings(np_obj);
200 if (!bindings)
201 return false;
202 bindings->instance()->SetSrcAttribute(src); 224 bindings->instance()->SetSrcAttribute(src);
203 return true; 225 return true;
204 } 226 }
227
228 if (IdentifierIsPartitionAttribute(name)) {
229 std::string partition_id = StringFromNPVariant(*variant);
230 std::string error_message;
231 if (!bindings->instance()->SetPartitionAttribute(partition_id,
232 error_message)) {
233 WebBindings::setException(
234 np_obj, static_cast<const NPUTF8 *>(error_message.c_str()));
235 return false;
236 }
237 return true;
238 }
239
205 return false; 240 return false;
206 } 241 }
207 242
208 bool BrowserPluginBindingsEnumerate(NPObject *np_obj, NPIdentifier **value, 243 bool BrowserPluginBindingsEnumerate(NPObject *np_obj, NPIdentifier **value,
209 uint32_t *count) { 244 uint32_t *count) {
210 NOTIMPLEMENTED(); 245 NOTIMPLEMENTED();
211 return true; 246 return true;
212 } 247 }
213 248
214 NPClass browser_plugin_message_class = { 249 NPClass browser_plugin_message_class = {
(...skipping 29 matching lines...) Expand all
244 WebBindings::createObject(NULL, &browser_plugin_message_class); 279 WebBindings::createObject(NULL, &browser_plugin_message_class);
245 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj); 280 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj);
246 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr(); 281 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr();
247 } 282 }
248 283
249 BrowserPluginBindings::~BrowserPluginBindings() { 284 BrowserPluginBindings::~BrowserPluginBindings() {
250 WebBindings::releaseObject(np_object_); 285 WebBindings::releaseObject(np_object_);
251 } 286 }
252 287
253 } // namespace content 288 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698