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

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

Issue 11826005: Browser Plugin: Implement BrowserPluginObserver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Clean up bindings API Created 7 years, 9 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"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/string16.h" 12 #include "base/string16.h"
13 #include "base/string_number_conversions.h" 13 #include "base/string_number_conversions.h"
14 #include "base/strings/string_split.h" 14 #include "base/strings/string_split.h"
15 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
16 #include "content/renderer/browser_plugin/browser_plugin.h" 16 #include "content/public/renderer/browser_plugin/browser_plugin_method_binding.h "
17 #include "content/public/renderer/browser_plugin/browser_plugin_property_binding .h"
17 #include "content/renderer/browser_plugin/browser_plugin_constants.h" 18 #include "content/renderer/browser_plugin/browser_plugin_constants.h"
18 #include "third_party/npapi/bindings/npapi.h" 19 #include "content/renderer/browser_plugin/browser_plugin_impl.h"
19 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h" 20 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h"
20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h" 21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h"
21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDOMMessageEvent.h" 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDOMMessageEvent.h"
23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h" 24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h"
24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 25 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
25 #include "third_party/WebKit/Source/WebKit/chromium/public/WebNode.h" 26 #include "third_party/WebKit/Source/WebKit/chromium/public/WebNode.h"
26 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" 27 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h"
27 #include "v8/include/v8.h" 28 #include "v8/include/v8.h"
28 29
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 NPUTF8 *chars = static_cast<NPUTF8 *>(malloc(length)); 65 NPUTF8 *chars = static_cast<NPUTF8 *>(malloc(length));
65 if (!chars) { 66 if (!chars) {
66 VOID_TO_NPVARIANT(*variant); 67 VOID_TO_NPVARIANT(*variant);
67 return false; 68 return false;
68 } 69 }
69 memcpy(chars, in.c_str(), length); 70 memcpy(chars, in.c_str(), length);
70 STRINGN_TO_NPVARIANT(chars, length, *variant); 71 STRINGN_TO_NPVARIANT(chars, length, *variant);
71 return true; 72 return true;
72 } 73 }
73 74
75 bool MatchesName(const std::string& value, NPIdentifier name) {
76 return WebKit::WebBindings::getStringIdentifier(value.c_str()) == name;
77 }
78
74 //------------------------------------------------------------------------------ 79 //------------------------------------------------------------------------------
75 // Implementations of NPClass functions. These are here to: 80 // Implementations of NPClass functions. These are here to:
76 // - Implement src attribute. 81 // - Implement src attribute.
77 //------------------------------------------------------------------------------ 82 //------------------------------------------------------------------------------
78 NPObject* BrowserPluginBindingsAllocate(NPP npp, NPClass* the_class) { 83 NPObject* BrowserPluginBindingsAllocate(NPP npp, NPClass* the_class) {
79 return new BrowserPluginBindings::BrowserPluginNPObject; 84 return new BrowserPluginBindings::BrowserPluginNPObject;
80 } 85 }
81 86
82 void BrowserPluginBindingsDeallocate(NPObject* object) { 87 void BrowserPluginBindingsDeallocate(NPObject* object) {
83 BrowserPluginBindings::BrowserPluginNPObject* instance = 88 BrowserPluginBindings::BrowserPluginNPObject* instance =
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 &BrowserPluginBindingsInvokeDefault, 185 &BrowserPluginBindingsInvokeDefault,
181 &BrowserPluginBindingsHasProperty, 186 &BrowserPluginBindingsHasProperty,
182 &BrowserPluginBindingsGetProperty, 187 &BrowserPluginBindingsGetProperty,
183 &BrowserPluginBindingsSetProperty, 188 &BrowserPluginBindingsSetProperty,
184 NULL, 189 NULL,
185 &BrowserPluginBindingsEnumerate, 190 &BrowserPluginBindingsEnumerate,
186 }; 191 };
187 192
188 } // namespace 193 } // namespace
189 194
190 // BrowserPluginMethodBinding -------------------------------------------------- 195 // Method Bindings ------------------------------------------------------------
191 196
192 class BrowserPluginMethodBinding { 197 class BrowserPluginMethodBindingImpl : public BrowserPluginMethodBinding {
193 public: 198 public:
194 BrowserPluginMethodBinding(const char name[], uint32 arg_count) 199 BrowserPluginMethodBindingImpl(BrowserPluginImpl* browser_plugin,
195 : name_(name), 200 const char name[],
201 uint32 arg_count)
202 : browser_plugin_(browser_plugin),
203 name_(name),
196 arg_count_(arg_count) { 204 arg_count_(arg_count) {
197 } 205 }
198 206
199 virtual ~BrowserPluginMethodBinding() {} 207 virtual ~BrowserPluginMethodBindingImpl() {}
200 208
201 bool MatchesName(NPIdentifier name) const { 209 BrowserPluginImpl* browser_plugin() const { return browser_plugin_; }
202 return WebBindings::getStringIdentifier(name_.c_str()) == name; 210
211 virtual const std::string& GetName() const OVERRIDE {
212 return name_;
203 } 213 }
204 214 virtual uint32 GetArgCount() const OVERRIDE { return arg_count_; }
205 uint32 arg_count() const { return arg_count_; }
206
207 virtual bool Invoke(BrowserPluginBindings* bindings,
208 const NPVariant* args,
209 NPVariant* result) = 0;
210 215
211 private: 216 private:
217 BrowserPluginImpl* browser_plugin_;
212 std::string name_; 218 std::string name_;
213 uint32 arg_count_; 219 uint32 arg_count_;
214 220
215 DISALLOW_COPY_AND_ASSIGN(BrowserPluginMethodBinding); 221 DISALLOW_COPY_AND_ASSIGN(BrowserPluginMethodBindingImpl);
216 }; 222 };
217 223
218 class BrowserPluginBindingBack : public BrowserPluginMethodBinding { 224 class BrowserPluginBindingBack : public BrowserPluginMethodBindingImpl {
219 public: 225 public:
220 BrowserPluginBindingBack() 226 BrowserPluginBindingBack(BrowserPluginImpl* browser_plugin)
221 : BrowserPluginMethodBinding(browser_plugin::kMethodBack, 0) { 227 : BrowserPluginMethodBindingImpl(browser_plugin,
228 browser_plugin::kMethodBack, 0) {
222 } 229 }
223 230
224 virtual bool Invoke(BrowserPluginBindings* bindings, 231 virtual bool Invoke(const NPVariant* args, NPVariant* result) OVERRIDE {
225 const NPVariant* args, 232 browser_plugin()->Back();
226 NPVariant* result) OVERRIDE {
227 bindings->instance()->Back();
228 return true; 233 return true;
229 } 234 }
230 235
231 private: 236 private:
232 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingBack); 237 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingBack);
233 }; 238 };
234 239
235 class BrowserPluginBindingCanGoBack : public BrowserPluginMethodBinding { 240 class BrowserPluginBindingCanGoBack : public BrowserPluginMethodBindingImpl {
236 public: 241 public:
237 BrowserPluginBindingCanGoBack() 242 BrowserPluginBindingCanGoBack(BrowserPluginImpl* browser_plugin)
238 : BrowserPluginMethodBinding(browser_plugin::kMethodCanGoBack, 0) { 243 : BrowserPluginMethodBindingImpl(browser_plugin,
244 browser_plugin::kMethodCanGoBack, 0) {
239 } 245 }
240 246
241 virtual bool Invoke(BrowserPluginBindings* bindings, 247 virtual bool Invoke(const NPVariant* args, NPVariant* result) OVERRIDE {
242 const NPVariant* args, 248 BOOLEAN_TO_NPVARIANT(browser_plugin()->CanGoBack(), *result);
243 NPVariant* result) OVERRIDE {
244 BOOLEAN_TO_NPVARIANT(bindings->instance()->CanGoBack(), *result);
245 return true; 249 return true;
246 } 250 }
247 251
248 private: 252 private:
249 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingCanGoBack); 253 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingCanGoBack);
250 }; 254 };
251 255
252 class BrowserPluginBindingCanGoForward : public BrowserPluginMethodBinding { 256 class BrowserPluginBindingCanGoForward : public BrowserPluginMethodBindingImpl {
253 public: 257 public:
254 BrowserPluginBindingCanGoForward() 258 BrowserPluginBindingCanGoForward(BrowserPluginImpl* browser_plugin)
255 : BrowserPluginMethodBinding(browser_plugin::kMethodCanGoForward, 0) { 259 : BrowserPluginMethodBindingImpl(browser_plugin,
260 browser_plugin::kMethodCanGoForward, 0) {
256 } 261 }
257 262
258 virtual bool Invoke(BrowserPluginBindings* bindings, 263 virtual bool Invoke(const NPVariant* args, NPVariant* result) OVERRIDE {
259 const NPVariant* args, 264 BOOLEAN_TO_NPVARIANT(browser_plugin()->CanGoForward(), *result);
260 NPVariant* result) OVERRIDE {
261 BOOLEAN_TO_NPVARIANT(bindings->instance()->CanGoForward(), *result);
262 return true; 265 return true;
263 } 266 }
264 267
265 private: 268 private:
266 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingCanGoForward); 269 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingCanGoForward);
267 }; 270 };
268 271
269 class BrowserPluginBindingForward : public BrowserPluginMethodBinding { 272 class BrowserPluginBindingForward : public BrowserPluginMethodBindingImpl {
270 public: 273 public:
271 BrowserPluginBindingForward() 274 BrowserPluginBindingForward(BrowserPluginImpl* browser_plugin)
272 : BrowserPluginMethodBinding(browser_plugin::kMethodForward, 0) { 275 : BrowserPluginMethodBindingImpl(browser_plugin,
276 browser_plugin::kMethodForward, 0) {
273 } 277 }
274 278
275 virtual bool Invoke(BrowserPluginBindings* bindings, 279 virtual bool Invoke(const NPVariant* args, NPVariant* result) OVERRIDE {
276 const NPVariant* args, 280 browser_plugin()->Forward();
277 NPVariant* result) OVERRIDE {
278 bindings->instance()->Forward();
279 return true; 281 return true;
280 } 282 }
281 283
282 private: 284 private:
283 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingForward); 285 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingForward);
284 }; 286 };
285 287
286 // Note: This is a method that is used internally by the <webview> shim only. 288 // Note: This is a method that is used internally by the <webview> shim only.
287 // This should not be exposed to developers. 289 // This should not be exposed to developers.
288 class BrowserPluginBindingGetRouteID : public BrowserPluginMethodBinding { 290 class BrowserPluginBindingGetRouteID : public BrowserPluginMethodBindingImpl {
289 public: 291 public:
290 BrowserPluginBindingGetRouteID() 292 BrowserPluginBindingGetRouteID(BrowserPluginImpl* browser_plugin)
291 : BrowserPluginMethodBinding(browser_plugin::kMethodGetRouteId, 0) { 293 : BrowserPluginMethodBindingImpl(browser_plugin,
294 browser_plugin::kMethodGetRouteId, 0) {
292 } 295 }
293 296
294 virtual bool Invoke(BrowserPluginBindings* bindings, 297 virtual bool Invoke(const NPVariant* args, NPVariant* result) OVERRIDE {
295 const NPVariant* args, 298 INT32_TO_NPVARIANT(browser_plugin()->guest_route_id(), *result);
296 NPVariant* result) OVERRIDE {
297 int route_id = bindings->instance()->guest_route_id();
298 INT32_TO_NPVARIANT(route_id, *result);
299 return true; 299 return true;
300 } 300 }
301 301
302 private: 302 private:
303 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingGetRouteID); 303 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingGetRouteID);
304 }; 304 };
305 305
306 class BrowserPluginBindingGetProcessID : public BrowserPluginMethodBinding { 306 class BrowserPluginBindingGetProcessID :
307 public BrowserPluginMethodBindingImpl {
307 public: 308 public:
308 BrowserPluginBindingGetProcessID() 309 BrowserPluginBindingGetProcessID(BrowserPluginImpl* browser_plugin)
309 : BrowserPluginMethodBinding(browser_plugin::kMethodGetProcessId, 0) { 310 : BrowserPluginMethodBindingImpl(browser_plugin,
311 browser_plugin::kMethodGetProcessId, 0) {
310 } 312 }
311 313
312 virtual bool Invoke(BrowserPluginBindings* bindings, 314 virtual bool Invoke(const NPVariant* args, NPVariant* result) OVERRIDE {
313 const NPVariant* args, 315 INT32_TO_NPVARIANT(browser_plugin()->guest_process_id(), *result);
314 NPVariant* result) OVERRIDE {
315 int process_id = bindings->instance()->guest_process_id();
316 INT32_TO_NPVARIANT(process_id, *result);
317 return true; 316 return true;
318 } 317 }
319 318
320 private: 319 private:
321 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingGetProcessID); 320 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingGetProcessID);
322 }; 321 };
323 322
324 class BrowserPluginBindingGo : public BrowserPluginMethodBinding { 323 class BrowserPluginBindingGo : public BrowserPluginMethodBindingImpl {
325 public: 324 public:
326 BrowserPluginBindingGo() 325 BrowserPluginBindingGo(BrowserPluginImpl* browser_plugin)
327 : BrowserPluginMethodBinding(browser_plugin::kMethodGo, 1) { 326 : BrowserPluginMethodBindingImpl(browser_plugin,
327 browser_plugin::kMethodGo, 1) {
328 } 328 }
329 329
330 virtual bool Invoke(BrowserPluginBindings* bindings, 330 virtual bool Invoke(const NPVariant* args, NPVariant* result) OVERRIDE {
331 const NPVariant* args, 331 browser_plugin()->Go(Int32FromNPVariant(args[0]));
332 NPVariant* result) OVERRIDE {
333 bindings->instance()->Go(Int32FromNPVariant(args[0]));
334 return true; 332 return true;
335 } 333 }
336 334
337 private: 335 private:
338 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingGo); 336 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingGo);
339 }; 337 };
340 338
341 class BrowserPluginBindingReload : public BrowserPluginMethodBinding { 339 class BrowserPluginBindingReload : public BrowserPluginMethodBindingImpl {
342 public: 340 public:
343 BrowserPluginBindingReload() 341 BrowserPluginBindingReload(BrowserPluginImpl* browser_plugin)
344 : BrowserPluginMethodBinding(browser_plugin::kMethodReload, 0) { 342 : BrowserPluginMethodBindingImpl(browser_plugin,
343 browser_plugin::kMethodReload, 0) {
345 } 344 }
346 345
347 virtual bool Invoke(BrowserPluginBindings* bindings, 346 virtual bool Invoke(const NPVariant* args, NPVariant* result) OVERRIDE {
348 const NPVariant* args, 347 browser_plugin()->Reload();
349 NPVariant* result) OVERRIDE {
350 bindings->instance()->Reload();
351 return true; 348 return true;
352 } 349 }
353 350
354 private: 351 private:
355 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingReload); 352 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingReload);
356 }; 353 };
357 354
358 class BrowserPluginBindingStop : public BrowserPluginMethodBinding { 355 class BrowserPluginBindingStop : public BrowserPluginMethodBindingImpl {
359 public: 356 public:
360 BrowserPluginBindingStop() 357 BrowserPluginBindingStop(BrowserPluginImpl* browser_plugin)
361 : BrowserPluginMethodBinding(browser_plugin::kMethodStop, 0) { 358 : BrowserPluginMethodBindingImpl(browser_plugin,
359 browser_plugin::kMethodStop, 0) {
362 } 360 }
363 361
364 virtual bool Invoke(BrowserPluginBindings* bindings, 362 virtual bool Invoke(const NPVariant* args, NPVariant* result) OVERRIDE {
365 const NPVariant* args, 363 browser_plugin()->Stop();
366 NPVariant* result) OVERRIDE {
367 bindings->instance()->Stop();
368 return true; 364 return true;
369 } 365 }
370 366
371 private: 367 private:
372 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingStop); 368 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingStop);
373 }; 369 };
374 370
375 class BrowserPluginBindingTerminate : public BrowserPluginMethodBinding { 371 class BrowserPluginBindingTerminate : public BrowserPluginMethodBindingImpl {
376 public: 372 public:
377 BrowserPluginBindingTerminate() 373 BrowserPluginBindingTerminate(BrowserPluginImpl* browser_plugin)
378 : BrowserPluginMethodBinding(browser_plugin::kMethodTerminate, 0) { 374 : BrowserPluginMethodBindingImpl(browser_plugin,
375 browser_plugin::kMethodTerminate, 0) {
379 } 376 }
380 377
381 virtual bool Invoke(BrowserPluginBindings* bindings, 378 virtual bool Invoke(const NPVariant* args, NPVariant* result) OVERRIDE {
382 const NPVariant* args, 379 browser_plugin()->TerminateGuest();
383 NPVariant* result) OVERRIDE {
384 bindings->instance()->TerminateGuest();
385 return true; 380 return true;
386 } 381 }
387 382
388 private: 383 private:
389 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingTerminate); 384 DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingTerminate);
390 }; 385 };
391 386
392 // BrowserPluginPropertyBinding ------------------------------------------------ 387 // Property Bindings ----------------------------------------------------------
393 388
394 class BrowserPluginPropertyBinding { 389 class BrowserPluginPropertyBindingImpl : public BrowserPluginPropertyBinding {
395 public: 390 public:
396 explicit BrowserPluginPropertyBinding(const char name[]) : name_(name) {} 391 BrowserPluginPropertyBindingImpl(BrowserPluginImpl* browser_plugin,
397 virtual ~BrowserPluginPropertyBinding() {} 392 const char name[])
398 const std::string& name() const { return name_; } 393 : browser_plugin_(browser_plugin),
399 bool MatchesName(NPIdentifier name) const { 394 name_(name) {}
400 return WebBindings::getStringIdentifier(name_.c_str()) == name; 395
396 virtual ~BrowserPluginPropertyBindingImpl() {}
397
398 BrowserPluginImpl* browser_plugin() const {
399 return browser_plugin_;
401 } 400 }
402 virtual bool GetProperty(BrowserPluginBindings* bindings, 401
403 NPVariant* result) = 0; 402 // BrowserPluginPropertyBinding implementation.
404 virtual bool SetProperty(BrowserPluginBindings* bindings, 403 virtual const std::string& GetName() const OVERRIDE {
405 NPObject* np_obj, 404 return name_;
406 const NPVariant* variant) = 0; 405 }
407 virtual void RemoveProperty(BrowserPluginBindings* bindings,
408 NPObject* np_obj) = 0;
409 // Updates the DOM Attribute value with the current property value. 406 // Updates the DOM Attribute value with the current property value.
410 void UpdateDOMAttribute(BrowserPluginBindings* bindings, 407 void UpdateDOMAttribute(std::string new_value) {
411 std::string new_value) { 408 browser_plugin_->UpdateDOMAttribute(name_, new_value);
412 bindings->instance()->UpdateDOMAttribute(name(), new_value);
413 } 409 }
414 protected: 410 protected:
415 // Depending on where the attribute comes from it could be a string, int32, 411 // Depending on where the attribute comes from it could be a string, int32,
416 // or a double. Javascript tends to produce an Int32 or a String, but setting 412 // or a double. Javascript tends to produce an Int32 or a String, but setting
417 // the value from the developer tools console may also produce a Double... 413 // the value from the developer tools console may also produce a Double...
418 int IntFromNPVariant(const NPVariant* variant) { 414 int IntFromNPVariant(const NPVariant* variant) {
419 int value; 415 int value;
420 switch (variant->type) { 416 switch (variant->type) {
421 case NPVariantType_Double: 417 case NPVariantType_Double:
422 case NPVariantType_Int32: 418 case NPVariantType_Int32:
423 value = Int32FromNPVariant(*variant); 419 value = Int32FromNPVariant(*variant);
424 break; 420 break;
425 case NPVariantType_String: 421 case NPVariantType_String:
426 base::StringToInt(StringFromNPVariant(*variant), &value); 422 base::StringToInt(StringFromNPVariant(*variant), &value);
427 break; 423 break;
428 default: 424 default:
429 value = 0; 425 value = 0;
430 break; 426 break;
431 } 427 }
432 return value; 428 return value;
433 } 429 }
434 private: 430
431 private:
432 BrowserPluginImpl* browser_plugin_;
435 std::string name_; 433 std::string name_;
436 434
437 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBinding); 435 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingImpl);
438 }; 436 };
439 437
440 class BrowserPluginPropertyBindingAutoSize 438 class BrowserPluginPropertyBindingAutoSize
441 : public BrowserPluginPropertyBinding { 439 : public BrowserPluginPropertyBindingImpl {
442 public: 440 public:
443 BrowserPluginPropertyBindingAutoSize() 441 BrowserPluginPropertyBindingAutoSize(BrowserPluginImpl* browser_plugin) :
444 : BrowserPluginPropertyBinding(browser_plugin::kAttributeAutoSize) { 442 BrowserPluginPropertyBindingImpl(browser_plugin,
445 } 443 browser_plugin::kAttributeAutoSize) {
446 virtual bool GetProperty(BrowserPluginBindings* bindings, 444 }
447 NPVariant* result) OVERRIDE { 445 virtual bool GetProperty(NPVariant* result) OVERRIDE {
448 bool auto_size = bindings->instance()->GetAutoSizeAttribute(); 446 BOOLEAN_TO_NPVARIANT(browser_plugin()->GetAutoSizeAttribute(), *result);
449 BOOLEAN_TO_NPVARIANT(auto_size, *result); 447 return true;
450 return true; 448 }
451 } 449 virtual bool SetProperty(NPObject* np_obj,
452 virtual bool SetProperty(BrowserPluginBindings* bindings,
453 NPObject* np_obj,
454 const NPVariant* variant) OVERRIDE { 450 const NPVariant* variant) OVERRIDE {
455 std::string value = StringFromNPVariant(*variant); 451 std::string value = StringFromNPVariant(*variant);
456 if (!bindings->instance()->HasDOMAttribute(name())) { 452 if (!browser_plugin()->HasDOMAttribute(GetName())) {
457 UpdateDOMAttribute(bindings, value); 453 UpdateDOMAttribute(value);
458 bindings->instance()->ParseAutoSizeAttribute(); 454 browser_plugin()->ParseAutoSizeAttribute();
459 } else { 455 } else {
460 UpdateDOMAttribute(bindings, value); 456 UpdateDOMAttribute(value);
461 } 457 }
462 return true; 458 return true;
463 } 459 }
464 virtual void RemoveProperty(BrowserPluginBindings* bindings, 460 virtual void RemoveProperty(NPObject* np_obj) OVERRIDE {
465 NPObject* np_obj) OVERRIDE { 461 browser_plugin()->RemoveDOMAttribute(GetName());
466 bindings->instance()->RemoveDOMAttribute(name()); 462 browser_plugin()->ParseAutoSizeAttribute();
467 bindings->instance()->ParseAutoSizeAttribute();
468 } 463 }
469 private: 464 private:
470 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingAutoSize); 465 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingAutoSize);
471 }; 466 };
472 467
473 class BrowserPluginPropertyBindingContentWindow 468 class BrowserPluginPropertyBindingContentWindow
474 : public BrowserPluginPropertyBinding { 469 : public BrowserPluginPropertyBindingImpl {
475 public: 470 public:
476 BrowserPluginPropertyBindingContentWindow() 471 BrowserPluginPropertyBindingContentWindow(BrowserPluginImpl* browser_plugin) :
477 : BrowserPluginPropertyBinding(browser_plugin::kAttributeContentWindow) { 472 BrowserPluginPropertyBindingImpl(
478 } 473 browser_plugin,
479 virtual bool GetProperty(BrowserPluginBindings* bindings, 474 browser_plugin::kAttributeContentWindow) {
480 NPVariant* result) OVERRIDE { 475 }
481 NPObject* obj = bindings->instance()->GetContentWindow(); 476 virtual bool GetProperty(NPVariant* result) OVERRIDE {
477 NPObject* obj = browser_plugin()->GetContentWindow();
482 if (obj) { 478 if (obj) {
483 result->type = NPVariantType_Object; 479 result->type = NPVariantType_Object;
484 result->value.objectValue = WebBindings::retainObject(obj); 480 result->value.objectValue = WebBindings::retainObject(obj);
485 } 481 }
486 return true; 482 return true;
487 } 483 }
488 virtual bool SetProperty(BrowserPluginBindings* bindings, 484 virtual bool SetProperty(NPObject* np_obj,
489 NPObject* np_obj,
490 const NPVariant* variant) OVERRIDE { 485 const NPVariant* variant) OVERRIDE {
491 return false; 486 return false;
492 } 487 }
493 virtual void RemoveProperty(BrowserPluginBindings* bindings, 488 virtual void RemoveProperty(NPObject* np_obj) OVERRIDE {}
494 NPObject* np_obj) OVERRIDE {}
495 private: 489 private:
496 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingContentWindow); 490 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingContentWindow);
497 }; 491 };
498 492
499 class BrowserPluginPropertyBindingMaxHeight 493 class BrowserPluginPropertyBindingMaxHeight
500 : public BrowserPluginPropertyBinding { 494 : public BrowserPluginPropertyBindingImpl {
501 public: 495 public:
502 BrowserPluginPropertyBindingMaxHeight() 496 BrowserPluginPropertyBindingMaxHeight(BrowserPluginImpl* browser_plugin) :
503 : BrowserPluginPropertyBinding(browser_plugin::kAttributeMaxHeight) { 497 BrowserPluginPropertyBindingImpl(browser_plugin,
504 } 498 browser_plugin::kAttributeMaxHeight) {
505 virtual bool GetProperty(BrowserPluginBindings* bindings, 499 }
506 NPVariant* result) OVERRIDE { 500 virtual bool GetProperty(NPVariant* result) OVERRIDE {
507 int max_height = bindings->instance()->GetMaxHeightAttribute(); 501 INT32_TO_NPVARIANT(browser_plugin()->GetMaxHeightAttribute(), *result);
508 INT32_TO_NPVARIANT(max_height, *result); 502 return true;
509 return true; 503 }
510 } 504 virtual bool SetProperty(NPObject* np_obj,
511 virtual bool SetProperty(BrowserPluginBindings* bindings, 505 const NPVariant* variant) OVERRIDE {
512 NPObject* np_obj, 506 int new_value = IntFromNPVariant(variant);
513 const NPVariant* variant) OVERRIDE { 507 if (browser_plugin()->GetMaxHeightAttribute() != new_value) {
514 int new_value = IntFromNPVariant(variant); 508 UpdateDOMAttribute(base::IntToString(new_value));
515 if (bindings->instance()->GetMaxHeightAttribute() != new_value) { 509 browser_plugin()->ParseSizeContraintsChanged();
516 UpdateDOMAttribute(bindings, base::IntToString(new_value)); 510 }
517 bindings->instance()->ParseSizeContraintsChanged(); 511 return true;
518 } 512 }
519 return true; 513 virtual void RemoveProperty(NPObject* np_obj) OVERRIDE {
520 } 514 browser_plugin()->RemoveDOMAttribute(GetName());
521 virtual void RemoveProperty(BrowserPluginBindings* bindings, 515 browser_plugin()->ParseSizeContraintsChanged();
522 NPObject* np_obj) OVERRIDE {
523 bindings->instance()->RemoveDOMAttribute(name());
524 bindings->instance()->ParseSizeContraintsChanged();
525 } 516 }
526 private: 517 private:
527 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingMaxHeight); 518 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingMaxHeight);
528 }; 519 };
529 520
530 class BrowserPluginPropertyBindingMaxWidth 521 class BrowserPluginPropertyBindingMaxWidth
531 : public BrowserPluginPropertyBinding { 522 : public BrowserPluginPropertyBindingImpl {
532 public: 523 public:
533 BrowserPluginPropertyBindingMaxWidth() 524 BrowserPluginPropertyBindingMaxWidth(BrowserPluginImpl* browser_plugin) :
534 : BrowserPluginPropertyBinding(browser_plugin::kAttributeMaxWidth) { 525 BrowserPluginPropertyBindingImpl(browser_plugin,
535 } 526 browser_plugin::kAttributeMaxWidth) {
536 virtual bool GetProperty(BrowserPluginBindings* bindings, 527 }
537 NPVariant* result) OVERRIDE { 528 virtual bool GetProperty(NPVariant* result) OVERRIDE {
538 int max_width = bindings->instance()->GetMaxWidthAttribute(); 529 INT32_TO_NPVARIANT(browser_plugin()->GetMaxWidthAttribute(), *result);
539 INT32_TO_NPVARIANT(max_width, *result); 530 return true;
540 return true; 531 }
541 } 532 virtual bool SetProperty(NPObject* np_obj,
542 virtual bool SetProperty(BrowserPluginBindings* bindings, 533 const NPVariant* variant) OVERRIDE {
543 NPObject* np_obj, 534 int new_value = IntFromNPVariant(variant);
544 const NPVariant* variant) OVERRIDE { 535 if (browser_plugin()->GetMaxWidthAttribute() != new_value) {
545 int new_value = IntFromNPVariant(variant); 536 UpdateDOMAttribute(base::IntToString(new_value));
546 if (bindings->instance()->GetMaxWidthAttribute() != new_value) { 537 browser_plugin()->ParseSizeContraintsChanged();
547 UpdateDOMAttribute(bindings, base::IntToString(new_value)); 538 }
548 bindings->instance()->ParseSizeContraintsChanged(); 539 return true;
549 } 540 }
550 return true; 541 virtual void RemoveProperty(NPObject* np_obj) OVERRIDE {
551 } 542 browser_plugin()->RemoveDOMAttribute(GetName());
552 virtual void RemoveProperty(BrowserPluginBindings* bindings, 543 browser_plugin()->ParseSizeContraintsChanged();
553 NPObject* np_obj) OVERRIDE {
554 bindings->instance()->RemoveDOMAttribute(name());
555 bindings->instance()->ParseSizeContraintsChanged();
556 } 544 }
557 private: 545 private:
558 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingMaxWidth); 546 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingMaxWidth);
559 }; 547 };
560 548
561 class BrowserPluginPropertyBindingMinHeight 549 class BrowserPluginPropertyBindingMinHeight
562 : public BrowserPluginPropertyBinding { 550 : public BrowserPluginPropertyBindingImpl {
563 public: 551 public:
564 BrowserPluginPropertyBindingMinHeight() 552 BrowserPluginPropertyBindingMinHeight(BrowserPluginImpl* browser_plugin) :
565 : BrowserPluginPropertyBinding(browser_plugin::kAttributeMinHeight) { 553 BrowserPluginPropertyBindingImpl(browser_plugin,
566 } 554 browser_plugin::kAttributeMinHeight) {
567 virtual bool GetProperty(BrowserPluginBindings* bindings, 555 }
568 NPVariant* result) OVERRIDE { 556 virtual bool GetProperty(NPVariant* result) OVERRIDE {
569 int min_height = bindings->instance()->GetMinHeightAttribute(); 557 INT32_TO_NPVARIANT(browser_plugin()->GetMinHeightAttribute(), *result);
570 INT32_TO_NPVARIANT(min_height, *result); 558 return true;
571 return true; 559 }
572 } 560 virtual bool SetProperty(NPObject* np_obj,
573 virtual bool SetProperty(BrowserPluginBindings* bindings, 561 const NPVariant* variant) OVERRIDE {
574 NPObject* np_obj, 562 int new_value = IntFromNPVariant(variant);
575 const NPVariant* variant) OVERRIDE { 563 if (browser_plugin()->GetMinHeightAttribute() != new_value) {
576 int new_value = IntFromNPVariant(variant); 564 UpdateDOMAttribute(base::IntToString(new_value));
577 if (bindings->instance()->GetMinHeightAttribute() != new_value) { 565 browser_plugin()->ParseSizeContraintsChanged();
578 UpdateDOMAttribute(bindings, base::IntToString(new_value)); 566 }
579 bindings->instance()->ParseSizeContraintsChanged(); 567 return true;
580 } 568 }
581 return true; 569 virtual void RemoveProperty(NPObject* np_obj) OVERRIDE {
582 } 570 browser_plugin()->RemoveDOMAttribute(GetName());
583 virtual void RemoveProperty(BrowserPluginBindings* bindings, 571 browser_plugin()->ParseSizeContraintsChanged();
584 NPObject* np_obj) OVERRIDE {
585 bindings->instance()->RemoveDOMAttribute(name());
586 bindings->instance()->ParseSizeContraintsChanged();
587 } 572 }
588 private: 573 private:
589 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingMinHeight); 574 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingMinHeight);
590 }; 575 };
591 576
592 class BrowserPluginPropertyBindingMinWidth 577 class BrowserPluginPropertyBindingMinWidth
593 : public BrowserPluginPropertyBinding { 578 : public BrowserPluginPropertyBindingImpl {
594 public: 579 public:
595 BrowserPluginPropertyBindingMinWidth() 580 BrowserPluginPropertyBindingMinWidth(BrowserPluginImpl* browser_plugin) :
596 : BrowserPluginPropertyBinding(browser_plugin::kAttributeMinWidth) { 581 BrowserPluginPropertyBindingImpl(browser_plugin,
597 } 582 browser_plugin::kAttributeMinWidth) {
598 virtual bool GetProperty(BrowserPluginBindings* bindings, 583 }
599 NPVariant* result) OVERRIDE { 584 virtual bool GetProperty(NPVariant* result) OVERRIDE {
600 int min_width = bindings->instance()->GetMinWidthAttribute(); 585 INT32_TO_NPVARIANT(browser_plugin()->GetMinWidthAttribute(), *result);
601 INT32_TO_NPVARIANT(min_width, *result); 586 return true;
602 return true; 587 }
603 } 588 virtual bool SetProperty(NPObject* np_obj,
604 virtual bool SetProperty(BrowserPluginBindings* bindings, 589 const NPVariant* variant) OVERRIDE {
605 NPObject* np_obj, 590 int new_value = IntFromNPVariant(variant);
606 const NPVariant* variant) OVERRIDE { 591 if (browser_plugin()->GetMinWidthAttribute() != new_value) {
607 int new_value = IntFromNPVariant(variant); 592 UpdateDOMAttribute(base::IntToString(new_value));
608 if (bindings->instance()->GetMinWidthAttribute() != new_value) { 593 browser_plugin()->ParseSizeContraintsChanged();
609 UpdateDOMAttribute(bindings, base::IntToString(new_value)); 594 }
610 bindings->instance()->ParseSizeContraintsChanged(); 595 return true;
611 } 596 }
612 return true; 597 virtual void RemoveProperty(NPObject* np_obj) OVERRIDE {
613 } 598 browser_plugin()->RemoveDOMAttribute(GetName());
614 virtual void RemoveProperty(BrowserPluginBindings* bindings, 599 browser_plugin()->ParseSizeContraintsChanged();
615 NPObject* np_obj) OVERRIDE {
616 bindings->instance()->RemoveDOMAttribute(name());
617 bindings->instance()->ParseSizeContraintsChanged();
618 } 600 }
619 private: 601 private:
620 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingMinWidth); 602 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingMinWidth);
621 }; 603 };
622 604
623 class BrowserPluginPropertyBindingName 605 class BrowserPluginPropertyBindingName
624 : public BrowserPluginPropertyBinding { 606 : public BrowserPluginPropertyBindingImpl {
625 public: 607 public:
626 BrowserPluginPropertyBindingName() 608 BrowserPluginPropertyBindingName(BrowserPluginImpl* browser_plugin) :
627 : BrowserPluginPropertyBinding(browser_plugin::kAttributeName) { 609 BrowserPluginPropertyBindingImpl(browser_plugin,
628 } 610 browser_plugin::kAttributeName) {
629 virtual bool GetProperty(BrowserPluginBindings* bindings, 611 }
630 NPVariant* result) OVERRIDE { 612 virtual bool GetProperty(NPVariant* result) OVERRIDE {
631 std::string name = bindings->instance()->GetNameAttribute(); 613 StringToNPVariant(browser_plugin()->GetNameAttribute(), result);
632 return StringToNPVariant(name, result); 614 return true;
633 return true; 615 }
634 } 616 virtual bool SetProperty(NPObject* np_obj,
635 virtual bool SetProperty(BrowserPluginBindings* bindings,
636 NPObject* np_obj,
637 const NPVariant* variant) OVERRIDE { 617 const NPVariant* variant) OVERRIDE {
638 std::string new_value = StringFromNPVariant(*variant); 618 std::string new_value = StringFromNPVariant(*variant);
639 if (bindings->instance()->GetNameAttribute() != new_value) { 619 if (browser_plugin()->GetNameAttribute() != new_value) {
640 UpdateDOMAttribute(bindings, new_value); 620 UpdateDOMAttribute(new_value);
641 bindings->instance()->ParseNameAttribute(); 621 browser_plugin()->ParseNameAttribute();
642 } 622 }
643 return true; 623 return true;
644 } 624 }
645 virtual void RemoveProperty(BrowserPluginBindings* bindings, 625 virtual void RemoveProperty(NPObject* np_obj) OVERRIDE {
646 NPObject* np_obj) OVERRIDE { 626 browser_plugin()->RemoveDOMAttribute(GetName());
647 bindings->instance()->RemoveDOMAttribute(name()); 627 browser_plugin()->ParseNameAttribute();
648 bindings->instance()->ParseNameAttribute();
649 } 628 }
650 private: 629 private:
651 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingName); 630 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingName);
652 }; 631 };
653 632
654 class BrowserPluginPropertyBindingPartition 633 class BrowserPluginPropertyBindingPartition
655 : public BrowserPluginPropertyBinding { 634 : public BrowserPluginPropertyBindingImpl {
656 public: 635 public:
657 BrowserPluginPropertyBindingPartition() 636 BrowserPluginPropertyBindingPartition(BrowserPluginImpl* browser_plugin) :
658 : BrowserPluginPropertyBinding(browser_plugin::kAttributePartition) { 637 BrowserPluginPropertyBindingImpl(browser_plugin,
659 } 638 browser_plugin::kAttributePartition) {
660 virtual bool GetProperty(BrowserPluginBindings* bindings, 639 }
661 NPVariant* result) OVERRIDE { 640 virtual bool GetProperty(NPVariant* result) OVERRIDE {
662 std::string partition_id = bindings->instance()->GetPartitionAttribute(); 641 return StringToNPVariant(browser_plugin()->GetPartitionAttribute(), result);
663 return StringToNPVariant(partition_id, result); 642 }
664 } 643 virtual bool SetProperty(NPObject* np_obj,
665 virtual bool SetProperty(BrowserPluginBindings* bindings,
666 NPObject* np_obj,
667 const NPVariant* variant) OVERRIDE { 644 const NPVariant* variant) OVERRIDE {
668 std::string new_value = StringFromNPVariant(*variant); 645 std::string new_value = StringFromNPVariant(*variant);
669 std::string old_value = bindings->instance()->GetPartitionAttribute(); 646 std::string old_value = browser_plugin()->GetPartitionAttribute();
670 if (old_value != new_value) { 647 if (old_value != new_value) {
671 UpdateDOMAttribute(bindings, new_value); 648 UpdateDOMAttribute(new_value);
672 std::string error_message; 649 std::string error_message;
673 if (!bindings->instance()->ParsePartitionAttribute(&error_message)) { 650 if (!browser_plugin()->ParsePartitionAttribute(&error_message)) {
674 WebBindings::setException( 651 WebBindings::setException(
675 np_obj, static_cast<const NPUTF8 *>(error_message.c_str())); 652 np_obj, static_cast<const NPUTF8 *>(error_message.c_str()));
676 // Reset to old value on error. 653 // Reset to old value on error.
677 UpdateDOMAttribute(bindings, old_value); 654 UpdateDOMAttribute(old_value);
678 return false; 655 return false;
679 } 656 }
680 } 657 }
681 return true; 658 return true;
682 } 659 }
683 virtual void RemoveProperty(BrowserPluginBindings* bindings, 660 virtual void RemoveProperty(NPObject* np_obj) OVERRIDE {
684 NPObject* np_obj) OVERRIDE {
685 std::string error_message; 661 std::string error_message;
686 if (bindings->instance()->CanRemovePartitionAttribute(&error_message)) { 662 if (browser_plugin()->CanRemovePartitionAttribute(&error_message)) {
687 bindings->instance()->RemoveDOMAttribute(name()); 663 browser_plugin()->RemoveDOMAttribute(GetName());
688 } else { 664 } else {
689 WebBindings::setException( 665 WebBindings::setException(
690 np_obj, static_cast<const NPUTF8 *>(error_message.c_str())); 666 np_obj, static_cast<const NPUTF8 *>(error_message.c_str()));
691 } 667 }
692 } 668 }
693 private: 669 private:
694 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingPartition); 670 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingPartition);
695 }; 671 };
696 672
697 class BrowserPluginPropertyBindingSrc : public BrowserPluginPropertyBinding { 673 class BrowserPluginPropertyBindingSrc :
674 public BrowserPluginPropertyBindingImpl {
698 public: 675 public:
699 BrowserPluginPropertyBindingSrc() 676 BrowserPluginPropertyBindingSrc(BrowserPluginImpl* browser_plugin) :
700 : BrowserPluginPropertyBinding(browser_plugin::kAttributeSrc) { 677 BrowserPluginPropertyBindingImpl(browser_plugin,
678 browser_plugin::kAttributeSrc) {
701 } 679 }
702 virtual bool GetProperty(BrowserPluginBindings* bindings, 680 virtual bool GetProperty(NPVariant* result) OVERRIDE {
703 NPVariant* result) OVERRIDE { 681 return StringToNPVariant(browser_plugin()->GetSrcAttribute(), result);
704 std::string src = bindings->instance()->GetSrcAttribute();
705 return StringToNPVariant(src, result);
706 } 682 }
707 virtual bool SetProperty(BrowserPluginBindings* bindings, 683 virtual bool SetProperty(NPObject* np_obj,
708 NPObject* np_obj,
709 const NPVariant* variant) OVERRIDE { 684 const NPVariant* variant) OVERRIDE {
710 std::string new_value = StringFromNPVariant(*variant); 685 std::string new_value = StringFromNPVariant(*variant);
711 // We should not be issuing navigation IPCs if we attempt to set the 686 // We should not be issuing navigation IPCs if we attempt to set the
712 // src property to the empty string. Instead, we want to simply restore 687 // src property to the empty string. Instead, we want to simply restore
713 // the src attribute back to its old value. 688 // the src attribute back to its old value.
714 if (new_value.empty()) { 689 if (new_value.empty()) {
715 RemoveProperty(bindings, np_obj); 690 RemoveProperty(np_obj);
716 return true; 691 return true;
717 } 692 }
718 std::string old_value = bindings->instance()->GetSrcAttribute(); 693 std::string old_value = browser_plugin()->GetSrcAttribute();
719 bool guest_crashed = bindings->instance()->guest_crashed(); 694 bool guest_crashed = browser_plugin()->guest_crashed();
720 if ((old_value != new_value) || guest_crashed) { 695 if ((old_value != new_value) || guest_crashed) {
721 // If the new value was empty then we're effectively resetting the 696 // If the new value was empty then we're effectively resetting the
722 // attribute to the old value here. This will be picked up by <webview>'s 697 // attribute to the old value here. This will be picked up by <webview>'s
723 // mutation observer and will restore the src attribute after it has been 698 // mutation observer and will restore the src attribute after it has been
724 // removed. 699 // removed.
725 UpdateDOMAttribute(bindings, new_value); 700 UpdateDOMAttribute(new_value);
726 std::string error_message; 701 std::string error_message;
727 if (!bindings->instance()->ParseSrcAttribute(&error_message)) { 702 if (!browser_plugin()->ParseSrcAttribute(&error_message)) {
728 WebBindings::setException( 703 WebBindings::setException(
729 np_obj, static_cast<const NPUTF8 *>(error_message.c_str())); 704 np_obj, static_cast<const NPUTF8 *>(error_message.c_str()));
730 // Reset to old value on error. 705 // Reset to old value on error.
731 UpdateDOMAttribute(bindings, old_value); 706 UpdateDOMAttribute(old_value);
732 return false; 707 return false;
733 } 708 }
734 } 709 }
735 return true; 710 return true;
736 } 711 }
737 virtual void RemoveProperty(BrowserPluginBindings* bindings, 712 virtual void RemoveProperty(NPObject* np_obj) OVERRIDE {
738 NPObject* np_obj) OVERRIDE { 713 std::string old_value = browser_plugin()->GetSrcAttribute();
739 std::string old_value = bindings->instance()->GetSrcAttribute();
740 // Remove the DOM attribute to trigger the mutation observer when it is 714 // Remove the DOM attribute to trigger the mutation observer when it is
741 // restored to its original value again. 715 // restored to its original value again.
742 bindings->instance()->RemoveDOMAttribute(name()); 716 browser_plugin()->RemoveDOMAttribute(GetName());
743 UpdateDOMAttribute(bindings, old_value); 717 UpdateDOMAttribute(old_value);
744 } 718 }
745 private: 719 private:
746 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingSrc); 720 DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingSrc);
747 }; 721 };
748 722
749 723
750 // BrowserPluginBindings ------------------------------------------------------ 724 // BrowserPluginBindings ------------------------------------------------------
751 725
752 BrowserPluginBindings::BrowserPluginNPObject::BrowserPluginNPObject() { 726 BrowserPluginBindings::BrowserPluginNPObject::BrowserPluginNPObject() {
753 } 727 }
754 728
755 BrowserPluginBindings::BrowserPluginNPObject::~BrowserPluginNPObject() { 729 BrowserPluginBindings::BrowserPluginNPObject::~BrowserPluginNPObject() {
756 } 730 }
757 731
758 BrowserPluginBindings::BrowserPluginBindings(BrowserPlugin* instance) 732 BrowserPluginBindings::BrowserPluginBindings(BrowserPluginImpl* instance)
759 : instance_(instance), 733 : instance_(instance),
760 np_object_(NULL), 734 np_object_(NULL),
761 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { 735 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
762 NPObject* obj = 736 NPObject* obj =
763 WebBindings::createObject(NULL, &browser_plugin_message_class); 737 WebBindings::createObject(NULL, &browser_plugin_message_class);
764 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj); 738 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj);
765 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr(); 739 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr();
766 740
767 method_bindings_.push_back(new BrowserPluginBindingBack); 741 method_bindings_.push_back(new BrowserPluginBindingBack(instance));
768 method_bindings_.push_back(new BrowserPluginBindingCanGoBack); 742 method_bindings_.push_back(new BrowserPluginBindingCanGoBack(instance));
769 method_bindings_.push_back(new BrowserPluginBindingCanGoForward); 743 method_bindings_.push_back(new BrowserPluginBindingCanGoForward(instance));
770 method_bindings_.push_back(new BrowserPluginBindingForward); 744 method_bindings_.push_back(new BrowserPluginBindingForward(instance));
771 method_bindings_.push_back(new BrowserPluginBindingGetProcessID); 745 method_bindings_.push_back(new BrowserPluginBindingGetProcessID(instance));
772 method_bindings_.push_back(new BrowserPluginBindingGetRouteID); 746 method_bindings_.push_back(new BrowserPluginBindingGetRouteID(instance));
773 method_bindings_.push_back(new BrowserPluginBindingGo); 747 method_bindings_.push_back(new BrowserPluginBindingGo(instance));
774 method_bindings_.push_back(new BrowserPluginBindingReload); 748 method_bindings_.push_back(new BrowserPluginBindingReload(instance));
775 method_bindings_.push_back(new BrowserPluginBindingStop); 749 method_bindings_.push_back(new BrowserPluginBindingStop(instance));
776 method_bindings_.push_back(new BrowserPluginBindingTerminate); 750 method_bindings_.push_back(new BrowserPluginBindingTerminate(instance));
777 751
778 property_bindings_.push_back(new BrowserPluginPropertyBindingAutoSize); 752 property_bindings_.push_back(
779 property_bindings_.push_back(new BrowserPluginPropertyBindingContentWindow); 753 new BrowserPluginPropertyBindingAutoSize(instance));
780 property_bindings_.push_back(new BrowserPluginPropertyBindingMaxHeight); 754 property_bindings_.push_back(
781 property_bindings_.push_back(new BrowserPluginPropertyBindingMaxWidth); 755 new BrowserPluginPropertyBindingContentWindow(instance));
782 property_bindings_.push_back(new BrowserPluginPropertyBindingMinHeight); 756 property_bindings_.push_back(
783 property_bindings_.push_back(new BrowserPluginPropertyBindingMinWidth); 757 new BrowserPluginPropertyBindingMaxHeight(instance));
784 property_bindings_.push_back(new BrowserPluginPropertyBindingName); 758 property_bindings_.push_back(
785 property_bindings_.push_back(new BrowserPluginPropertyBindingPartition); 759 new BrowserPluginPropertyBindingMaxWidth(instance));
786 property_bindings_.push_back(new BrowserPluginPropertyBindingSrc); 760 property_bindings_.push_back(
761 new BrowserPluginPropertyBindingMinHeight(instance));
762 property_bindings_.push_back(
763 new BrowserPluginPropertyBindingMinWidth(instance));
764 property_bindings_.push_back(
765 new BrowserPluginPropertyBindingName(instance));
766 property_bindings_.push_back(
767 new BrowserPluginPropertyBindingPartition(instance));
768 property_bindings_.push_back(
769 new BrowserPluginPropertyBindingSrc(instance));
787 } 770 }
788 771
789 BrowserPluginBindings::~BrowserPluginBindings() { 772 BrowserPluginBindings::~BrowserPluginBindings() {
790 WebBindings::releaseObject(np_object_); 773 WebBindings::releaseObject(np_object_);
791 } 774 }
792 775
793 bool BrowserPluginBindings::HasMethod(NPIdentifier name) const { 776 bool BrowserPluginBindings::HasMethod(NPIdentifier name) const {
794 for (BindingList::const_iterator iter = method_bindings_.begin(); 777 for (BindingList::const_iterator iter = method_bindings_.begin();
795 iter != method_bindings_.end(); 778 iter != method_bindings_.end();
796 ++iter) { 779 ++iter) {
797 if ((*iter)->MatchesName(name)) 780 BrowserPluginMethodBinding* method = *iter;
781 if (MatchesName(method->GetName(), name))
798 return true; 782 return true;
799 } 783 }
800 return false; 784 return false;
801 } 785 }
802 786
803 bool BrowserPluginBindings::InvokeMethod(NPIdentifier name, 787 bool BrowserPluginBindings::InvokeMethod(NPIdentifier name,
804 const NPVariant* args, 788 const NPVariant* args,
805 uint32 arg_count, 789 uint32 arg_count,
806 NPVariant* result) { 790 NPVariant* result) {
807 for (BindingList::iterator iter = method_bindings_.begin(); 791 for (BindingList::iterator iter = method_bindings_.begin();
808 iter != method_bindings_.end(); 792 iter != method_bindings_.end();
809 ++iter) { 793 ++iter) {
810 if ((*iter)->MatchesName(name) && (*iter)->arg_count() == arg_count) 794 BrowserPluginMethodBinding* method = *iter;
811 return (*iter)->Invoke(this, args, result); 795 if (MatchesName(method->GetName(), name) &&
796 method->GetArgCount() == arg_count)
797 return method->Invoke(args, result);
812 } 798 }
813 return false; 799 return false;
814 } 800 }
815 801
816 bool BrowserPluginBindings::HasProperty(NPIdentifier name) const { 802 bool BrowserPluginBindings::HasProperty(NPIdentifier name) const {
817 for (PropertyBindingList::const_iterator iter = property_bindings_.begin(); 803 for (PropertyBindingList::const_iterator iter = property_bindings_.begin();
818 iter != property_bindings_.end(); 804 iter != property_bindings_.end();
819 ++iter) { 805 ++iter) {
820 if ((*iter)->MatchesName(name)) 806 BrowserPluginPropertyBinding* property = *iter;
807 if (MatchesName(property->GetName(), name))
821 return true; 808 return true;
822 } 809 }
823 return false; 810 return false;
824 } 811 }
825 812
826 bool BrowserPluginBindings::SetProperty(NPObject* np_obj, 813 bool BrowserPluginBindings::SetProperty(NPObject* np_obj,
827 NPIdentifier name, 814 NPIdentifier name,
828 const NPVariant* variant) { 815 const NPVariant* variant) {
829 for (PropertyBindingList::iterator iter = property_bindings_.begin(); 816 for (PropertyBindingList::iterator iter = property_bindings_.begin();
830 iter != property_bindings_.end(); 817 iter != property_bindings_.end();
831 ++iter) { 818 ++iter) {
832 if ((*iter)->MatchesName(name)) { 819 BrowserPluginPropertyBinding* property = *iter;
833 if ((*iter)->SetProperty(this, np_obj, variant)) { 820 if (MatchesName(property->GetName(), name)) {
821 if (property->SetProperty(np_obj, variant))
834 return true; 822 return true;
835 }
836 break; 823 break;
837 } 824 }
838 } 825 }
839 return false; 826 return false;
840 } 827 }
841 828
842 bool BrowserPluginBindings::RemoveProperty(NPObject* np_obj, 829 bool BrowserPluginBindings::RemoveProperty(NPObject* np_obj,
843 NPIdentifier name) { 830 NPIdentifier name) {
844 for (PropertyBindingList::iterator iter = property_bindings_.begin(); 831 for (PropertyBindingList::iterator iter = property_bindings_.begin();
845 iter != property_bindings_.end(); 832 iter != property_bindings_.end();
846 ++iter) { 833 ++iter) {
847 if ((*iter)->MatchesName(name)) { 834 BrowserPluginPropertyBinding* property = *iter;
848 (*iter)->RemoveProperty(this, np_obj); 835 if (MatchesName(property->GetName(), name)) {
836 property->RemoveProperty(np_obj);
849 return true; 837 return true;
850 } 838 }
851 } 839 }
852 return false; 840 return false;
853 } 841 }
854 842
855 bool BrowserPluginBindings::GetProperty(NPIdentifier name, NPVariant* result) { 843 bool BrowserPluginBindings::GetProperty(NPIdentifier name, NPVariant* result) {
856 for (PropertyBindingList::iterator iter = property_bindings_.begin(); 844 for (PropertyBindingList::iterator iter = property_bindings_.begin();
857 iter != property_bindings_.end(); 845 iter != property_bindings_.end();
858 ++iter) { 846 ++iter) {
859 if ((*iter)->MatchesName(name)) 847 BrowserPluginPropertyBinding* property = *iter;
860 return (*iter)->GetProperty(this, result); 848 if (MatchesName(property->GetName(), name))
849 return property->GetProperty(result);
861 } 850 }
862 return false; 851 return false;
863 } 852 }
864 853
854 void BrowserPluginBindings::AddMethodBinding(
855 BrowserPluginMethodBinding* method_binding) {
856 method_bindings_.push_back(method_binding);
857 }
858
859 void BrowserPluginBindings::AddPropertyBinding(
860 BrowserPluginPropertyBinding* property_binding) {
861 property_bindings_.push_back(property_binding);
862 }
863
865 } // namespace content 864 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698