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

Side by Side Diff: content/renderer/npapi/webplugin_impl.cc

Issue 1483733002: Remove support for NPObjects. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix bad rebase. Created 4 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
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/npapi/webplugin_impl.h" 5 #include "content/renderer/npapi/webplugin_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/crash_logging.h" 9 #include "base/debug/crash_logging.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 91
92 bool WebPluginImpl::initialize(WebPluginContainer* container) { 92 bool WebPluginImpl::initialize(WebPluginContainer* container) {
93 if (!render_view_.get()) { 93 if (!render_view_.get()) {
94 LOG(ERROR) << "No RenderView"; 94 LOG(ERROR) << "No RenderView";
95 return false; 95 return false;
96 } 96 }
97 97
98 WebPluginDelegateProxy* plugin_delegate = new WebPluginDelegateProxy( 98 WebPluginDelegateProxy* plugin_delegate = new WebPluginDelegateProxy(
99 this, mime_type_, render_view_, render_frame_); 99 this, mime_type_, render_view_, render_frame_);
100 100
101 // Store the plugin's unique identifier, used by the container to track its
102 // script objects.
103 npp_ = plugin_delegate->GetPluginNPP();
104
105 // Set the container before Initialize because the plugin may 101 // Set the container before Initialize because the plugin may
106 // synchronously call NPN_GetValue to get its container, or make calls 102 // synchronously call NPN_GetValue to get its container, or make calls
107 // passing script objects that need to be tracked, during initialization. 103 // passing script objects that need to be tracked, during initialization.
108 SetContainer(container); 104 SetContainer(container);
109 105
110 bool ok = plugin_delegate->Initialize( 106 bool ok = plugin_delegate->Initialize(
111 plugin_url_, arg_names_, arg_values_, load_manually_); 107 plugin_url_, arg_names_, arg_values_, load_manually_);
112 if (!ok) { 108 if (!ok) {
113 plugin_delegate->PluginDestroyed(); 109 plugin_delegate->PluginDestroyed();
114 110
(...skipping 20 matching lines...) Expand all
135 delegate_ = plugin_delegate; 131 delegate_ = plugin_delegate;
136 132
137 return true; 133 return true;
138 } 134 }
139 135
140 void WebPluginImpl::destroy() { 136 void WebPluginImpl::destroy() {
141 SetContainer(NULL); 137 SetContainer(NULL);
142 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); 138 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
143 } 139 }
144 140
145 NPObject* WebPluginImpl::scriptableObject() {
146 if (!delegate_)
147 return NULL;
148
149 return delegate_->GetPluginScriptableObject();
150 }
151
152 NPP WebPluginImpl::pluginNPP() {
153 return npp_;
154 }
155
156 bool WebPluginImpl::getFormValue(blink::WebString& value) { 141 bool WebPluginImpl::getFormValue(blink::WebString& value) {
157 if (!delegate_) 142 if (!delegate_)
158 return false; 143 return false;
159 base::string16 form_value; 144 base::string16 form_value;
160 if (!delegate_->GetFormValue(&form_value)) 145 if (!delegate_->GetFormValue(&form_value))
161 return false; 146 return false;
162 value = form_value; 147 value = form_value;
163 return true; 148 return true;
164 } 149 }
165 150
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 WebFrame* webframe, 248 WebFrame* webframe,
264 const WebPluginParams& params, 249 const WebPluginParams& params,
265 const base::FilePath& file_path, 250 const base::FilePath& file_path,
266 const base::WeakPtr<RenderViewImpl>& render_view, 251 const base::WeakPtr<RenderViewImpl>& render_view,
267 RenderFrameImpl* render_frame) 252 RenderFrameImpl* render_frame)
268 : render_frame_(render_frame), 253 : render_frame_(render_frame),
269 render_view_(render_view), 254 render_view_(render_view),
270 webframe_(webframe), 255 webframe_(webframe),
271 delegate_(NULL), 256 delegate_(NULL),
272 container_(NULL), 257 container_(NULL),
273 npp_(NULL),
274 plugin_url_(params.url), 258 plugin_url_(params.url),
275 load_manually_(params.loadManually), 259 load_manually_(params.loadManually),
276 first_geometry_update_(true), 260 first_geometry_update_(true),
277 ignore_response_error_(false), 261 ignore_response_error_(false),
278 file_path_(file_path), 262 file_path_(file_path),
279 mime_type_(base::ToLowerASCII(base::UTF16ToASCII( 263 mime_type_(base::ToLowerASCII(base::UTF16ToASCII(
280 base::StringPiece16(params.mimeType)))) { 264 base::StringPiece16(params.mimeType)))) {
281 DCHECK_EQ(params.attributeNames.size(), params.attributeValues.size()); 265 DCHECK_EQ(params.attributeNames.size(), params.attributeValues.size());
282 266
283 for (size_t i = 0; i < params.attributeNames.size(); ++i) { 267 for (size_t i = 0; i < params.attributeNames.size(); ++i) {
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 // to recover at this point. Break out. 408 // to recover at this point. Break out.
425 NOTREACHED(); 409 NOTREACHED();
426 return ROUTED; 410 return ROUTED;
427 } 411 }
428 } 412 }
429 413
430 container_->loadFrameRequest(request, target_str); 414 container_->loadFrameRequest(request, target_str);
431 return ROUTED; 415 return ROUTED;
432 } 416 }
433 417
434 NPObject* WebPluginImpl::GetWindowScriptNPObject() {
435 if (!webframe_) {
436 NOTREACHED();
437 return NULL;
438 }
439 return webframe_->windowObject();
440 }
441
442 NPObject* WebPluginImpl::GetPluginElement() {
443 return container_->scriptableObjectForElement();
444 }
445
446 bool WebPluginImpl::FindProxyForUrl(const GURL& url, std::string* proxy_list) { 418 bool WebPluginImpl::FindProxyForUrl(const GURL& url, std::string* proxy_list) {
447 // Proxy resolving doesn't work in single-process mode. 419 // Proxy resolving doesn't work in single-process mode.
448 return false; 420 return false;
449 } 421 }
450 422
451 void WebPluginImpl::SetCookie(const GURL& url, 423 void WebPluginImpl::SetCookie(const GURL& url,
452 const GURL& first_party_for_cookies, 424 const GURL& first_party_for_cookies,
453 const std::string& cookie) { 425 const std::string& cookie) {
454 if (!render_view_.get()) 426 if (!render_view_.get())
455 return; 427 return;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 509
538 void WebPluginImpl::InvalidateRect(const gfx::Rect& rect) { 510 void WebPluginImpl::InvalidateRect(const gfx::Rect& rect) {
539 if (container_) 511 if (container_)
540 container_->invalidateRect(rect); 512 container_->invalidateRect(rect);
541 } 513 }
542 514
543 void WebPluginImpl::SetContainer(WebPluginContainer* container) { 515 void WebPluginImpl::SetContainer(WebPluginContainer* container) {
544 if (!container) 516 if (!container)
545 TearDownPluginInstance(NULL); 517 TearDownPluginInstance(NULL);
546 container_ = container; 518 container_ = container;
547 if (container_)
548 container_->allowScriptObjects();
549 } 519 }
550 520
551 unsigned long WebPluginImpl::GetNextResourceId() { 521 unsigned long WebPluginImpl::GetNextResourceId() {
552 if (!webframe_) 522 if (!webframe_)
553 return 0; 523 return 0;
554 WebView* view = webframe_->view(); 524 WebView* view = webframe_->view();
555 if (!view) 525 if (!view)
556 return 0; 526 return 0;
557 return view->createUniqueIdentifierForRequest(); 527 return view->createUniqueIdentifierForRequest();
558 } 528 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 566
597 // Destroy the current plugin instance. 567 // Destroy the current plugin instance.
598 TearDownPluginInstance(loader); 568 TearDownPluginInstance(loader);
599 569
600 container_ = container_widget; 570 container_ = container_widget;
601 webframe_ = webframe; 571 webframe_ = webframe;
602 572
603 WebPluginDelegateProxy* plugin_delegate = new WebPluginDelegateProxy( 573 WebPluginDelegateProxy* plugin_delegate = new WebPluginDelegateProxy(
604 this, mime_type_, render_view_, render_frame_); 574 this, mime_type_, render_view_, render_frame_);
605 575
606 // Store the plugin's unique identifier, used by the container to track its
607 // script objects, and enable script objects (since Initialize may use them
608 // even if it fails).
609 npp_ = plugin_delegate->GetPluginNPP();
610 container_->allowScriptObjects();
611
612 bool ok = plugin_delegate && plugin_delegate->Initialize( 576 bool ok = plugin_delegate && plugin_delegate->Initialize(
613 plugin_url_, arg_names_, arg_values_, load_manually_); 577 plugin_url_, arg_names_, arg_values_, load_manually_);
614 578
615 if (!ok) { 579 if (!ok) {
616 container_->clearScriptObjects();
617 container_ = NULL; 580 container_ = NULL;
618 // TODO(iyengar) Should we delete the current plugin instance here? 581 // TODO(iyengar) Should we delete the current plugin instance here?
619 return false; 582 return false;
620 } 583 }
621 584
622 delegate_ = plugin_delegate; 585 delegate_ = plugin_delegate;
623 586
624 // Force a geometry update to occur to ensure that the plugin becomes 587 // Force a geometry update to occur to ensure that the plugin becomes
625 // visible. 588 // visible.
626 container_->reportGeometry(); 589 container_->reportGeometry();
627 590
628 // The plugin move sequences accumulated via DidMove are sent to the browser 591 // The plugin move sequences accumulated via DidMove are sent to the browser
629 // whenever the renderer paints. Force a paint here to ensure that changes 592 // whenever the renderer paints. Force a paint here to ensure that changes
630 // to the plugin window are propagated to the browser. 593 // to the plugin window are propagated to the browser.
631 container_->invalidate(); 594 container_->invalidate();
632 return true; 595 return true;
633 } 596 }
634 597
635 void WebPluginImpl::TearDownPluginInstance( 598 void WebPluginImpl::TearDownPluginInstance(
636 WebURLLoader* loader_to_ignore) { 599 WebURLLoader* loader_to_ignore) {
637 // JavaScript garbage collection may cause plugin script object references to 600 // JavaScript garbage collection may cause plugin script object references to
638 // be retained long after the plugin is destroyed. Some plugins won't cope 601 // be retained long after the plugin is destroyed. Some plugins won't cope
639 // with their objects being released after they've been destroyed, and once 602 // with their objects being released after they've been destroyed, and once
640 // we've actually unloaded the plugin the object's releaseobject() code may 603 // we've actually unloaded the plugin the object's releaseobject() code may
641 // no longer be in memory. The container tracks the plugin's objects and lets 604 // no longer be in memory. The container tracks the plugin's objects and lets
642 // us invalidate them, releasing the references to them held by the JavaScript 605 // us invalidate them, releasing the references to them held by the JavaScript
643 // runtime. 606 // runtime.
644 if (container_) { 607 if (container_) {
645 container_->clearScriptObjects();
646 container_->setWebLayer(NULL); 608 container_->setWebLayer(NULL);
647 } 609 }
648 610
649 // Call PluginDestroyed() first to prevent the plugin from calling us back 611 // Call PluginDestroyed() first to prevent the plugin from calling us back
650 // in the middle of tearing down the render tree. 612 // in the middle of tearing down the render tree.
651 if (delegate_) { 613 if (delegate_) {
652 // The plugin may call into the browser and pass script objects even during 614 // The plugin may call into the browser and pass script objects even during
653 // teardown, so temporarily re-enable plugin script objects. 615 // teardown, so temporarily re-enable plugin script objects.
654 DCHECK(container_); 616 DCHECK(container_);
655 container_->allowScriptObjects();
656 617
657 delegate_->PluginDestroyed(); 618 delegate_->PluginDestroyed();
658 delegate_ = NULL; 619 delegate_ = NULL;
659
660 // Invalidate any script objects created during teardown here, before the
661 // plugin might actually be unloaded.
662 container_->clearScriptObjects();
663 } 620 }
664 621
665 // This needs to be called now and not in the destructor since the 622 // This needs to be called now and not in the destructor since the
666 // webframe_ might not be valid anymore. 623 // webframe_ might not be valid anymore.
667 webframe_ = NULL; 624 webframe_ = NULL;
668 } 625 }
669 626
670 void WebPluginImpl::SetReferrer(blink::WebURLRequest* request, 627 void WebPluginImpl::SetReferrer(blink::WebURLRequest* request,
671 ReferrerValue referrer_flag) { 628 ReferrerValue referrer_flag) {
672 switch (referrer_flag) { 629 switch (referrer_flag) {
673 case DOCUMENT_URL: 630 case DOCUMENT_URL:
674 webframe_->setReferrerForRequest(*request, GURL()); 631 webframe_->setReferrerForRequest(*request, GURL());
675 break; 632 break;
676 633
677 case PLUGIN_SRC: 634 case PLUGIN_SRC:
678 webframe_->setReferrerForRequest(*request, plugin_url_); 635 webframe_->setReferrerForRequest(*request, plugin_url_);
679 break; 636 break;
680 637
681 default: 638 default:
682 break; 639 break;
683 } 640 }
684 } 641 }
685 642
686 } // namespace content 643 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698