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

Unified Diff: content/renderer/npapi/webplugin_impl.cc

Issue 1426923007: Remove PluginLoadObserver and related logic, it was only used for NPAPI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/npapi/webplugin_impl.h ('k') | content/renderer/pepper/pepper_plugin_instance_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/npapi/webplugin_impl.cc
diff --git a/content/renderer/npapi/webplugin_impl.cc b/content/renderer/npapi/webplugin_impl.cc
index 91ffa93820164a4271c0d898b1d39ca237f0e536..1c9c79814d1db8bba0b9210f0fc2c47fc422cfe3 100644
--- a/content/renderer/npapi/webplugin_impl.cc
+++ b/content/renderer/npapi/webplugin_impl.cc
@@ -362,23 +362,6 @@ void WebPluginImpl::updateGeometry(const WebRect& window_rect,
delegate_->UpdateGeometry(new_geometry.window_rect, new_geometry.clip_rect);
}
- // Initiate a download on the plugin url. This should be done for the
- // first update geometry sequence. We need to ensure that the plugin
- // receives the geometry update before it starts receiving data.
- if (first_geometry_update_) {
- // An empty url corresponds to an EMBED tag with no src attribute.
- if (!load_manually_ && plugin_url_.is_valid()) {
- // The Flash plugin hangs for a while if it receives data before
- // receiving valid plugin geometry. By valid geometry we mean the
- // geometry received by a call to setFrameRect in the Webkit
- // layout code path. To workaround this issue we download the
- // plugin source url on a timer.
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(&WebPluginImpl::OnDownloadPluginSrcUrl,
- weak_factory_.GetWeakPtr()));
- }
- }
-
#if defined(OS_WIN)
// Don't cache the geometry during the first geometry update. The first
// geometry update sequence is received when Widget::setParent is called.
@@ -439,58 +422,6 @@ WebInputEventResult WebPluginImpl::handleInputEvent(
: WebInputEventResult::NotHandled;
}
-void WebPluginImpl::didReceiveResponse(const WebURLResponse& response) {
- ignore_response_error_ = false;
-
- ResponseInfo response_info;
- GetResponseInfo(response, &response_info);
-
- delegate_->DidReceiveManualResponse(
- response_info.url,
- response_info.mime_type,
- GetAllHeaders(response),
- response_info.expected_length,
- response_info.last_modified);
-}
-
-void WebPluginImpl::didReceiveData(const char* data, int data_length) {
- delegate_->DidReceiveManualData(data, data_length);
-}
-
-void WebPluginImpl::didFinishLoading() {
- delegate_->DidFinishManualLoading();
-}
-
-void WebPluginImpl::didFailLoading(const WebURLError& error) {
- if (!ignore_response_error_)
- delegate_->DidManualLoadFail();
-}
-
-void WebPluginImpl::didFinishLoadingFrameRequest(
- const WebURL& url, void* notify_data) {
- if (delegate_) {
- // We're converting a void* into an arbitrary int id. Though
- // these types are the same size on all the platforms we support,
- // the compiler may complain as though they are different, so to
- // make the casting gods happy go through an intptr_t (the union
- // of void* and int) rather than converting straight across.
- delegate_->DidFinishLoadWithReason(
- url, NPRES_DONE, reinterpret_cast<intptr_t>(notify_data));
- }
-}
-
-void WebPluginImpl::didFailLoadingFrameRequest(
- const WebURL& url, void* notify_data, const WebURLError& error) {
- if (!delegate_)
- return;
-
- NPReason reason =
- error.reason == net::ERR_ABORTED ? NPRES_USER_BREAK : NPRES_NETWORK_ERR;
- // See comment in didFinishLoadingFrameRequest about the cast here.
- delegate_->DidFinishLoadWithReason(
- url, reason, reinterpret_cast<intptr_t>(notify_data));
-}
-
bool WebPluginImpl::isPlaceholder() {
return false;
}
@@ -564,8 +495,7 @@ WebPluginImpl::WebPluginImpl(
file_path_(file_path),
mime_type_(base::ToLowerASCII(base::UTF16ToASCII(
base::StringPiece16(params.mimeType)))),
- loader_client_(this),
- weak_factory_(this) {
+ loader_client_(this) {
DCHECK_EQ(params.attributeNames.size(), params.attributeValues.size());
for (size_t i = 0; i < params.attributeNames.size(); ++i) {
@@ -700,7 +630,6 @@ WebPluginImpl::RoutingStatus WebPluginImpl::RouteToFrame(
const char* target,
const char* buf,
unsigned int len,
- int notify_id,
ReferrerValue referrer_flag) {
// If there is no target, there is nothing to do
if (!target)
@@ -764,8 +693,7 @@ WebPluginImpl::RoutingStatus WebPluginImpl::RouteToFrame(
}
}
- container_->loadFrameRequest(
- request, target_str, notify_id != 0, reinterpret_cast<void*>(notify_id));
+ container_->loadFrameRequest(request, target_str);
return ROUTED;
}
@@ -903,12 +831,6 @@ void WebPluginImpl::InvalidateRect(const gfx::Rect& rect) {
container_->invalidateRect(rect);
}
-void WebPluginImpl::OnDownloadPluginSrcUrl() {
- HandleURLRequestInternal(
- plugin_url_.spec().c_str(), "GET", NULL, NULL, 0, 0, false, DOCUMENT_URL,
- false, true);
-}
-
WebPluginResourceClient* WebPluginImpl::GetClientFromLoader(
WebURLLoader* loader) {
ClientInfo* client_info = GetClientInfoFromLoader(loader);
@@ -981,8 +903,6 @@ void WebPluginImpl::didReceiveResponse(WebURLLoader* loader,
const WebURLResponse& response) {
// TODO(jam): THIS LOGIC IS COPIED IN PluginURLFetcher::OnReceivedResponse
// until kDirectNPAPIRequests is the default and we can remove this old path.
- static const int kHttpPartialResponseStatusCode = 206;
- static const int kHttpResponseSuccessStatusCode = 200;
WebPluginResourceClient* client = GetClientFromLoader(loader);
if (!client)
@@ -994,64 +914,6 @@ void WebPluginImpl::didReceiveResponse(WebURLLoader* loader,
if (!client_info)
return;
- bool request_is_seekable = true;
- if (client->IsMultiByteResponseExpected()) {
- if (response.httpStatusCode() == kHttpPartialResponseStatusCode) {
- ClientInfo* client_info = GetClientInfoFromLoader(loader);
- if (!client_info)
- return;
- if (HandleHttpMultipartResponse(response, client)) {
- // Multiple ranges requested, data will be delivered by
- // MultipartResponseDelegate.
- client_info->data_offset = 0;
- return;
- }
- int64 upper_bound = 0, instance_size = 0;
- // Single range requested - go through original processing for
- // non-multipart requests, but update data offset.
- MultipartResponseDelegate::ReadContentRanges(response,
- &client_info->data_offset,
- &upper_bound,
- &instance_size);
- } else if (response.httpStatusCode() == kHttpResponseSuccessStatusCode) {
- RenderThreadImpl::current()->RecordAction(
- base::UserMetricsAction("Plugin_200ForByteRange"));
- // If the client issued a byte range request and the server responds with
- // HTTP 200 OK, it indicates that the server does not support byte range
- // requests.
- // We need to emulate Firefox behavior by doing the following:-
- // 1. Destroy the plugin instance in the plugin process. Ensure that
- // existing resource requests initiated for the plugin instance
- // continue to remain valid.
- // 2. Create a new plugin instance and notify it about the response
- // received here.
- if (!ReinitializePluginForResponse(loader)) {
- NOTREACHED();
- return;
- }
-
- // The server does not support byte range requests. No point in creating
- // seekable streams.
- request_is_seekable = false;
-
- delete client;
- client = NULL;
-
- // Create a new resource client for this request.
- for (size_t i = 0; i < clients_.size(); ++i) {
- if (clients_[i].loader.get() == loader) {
- WebPluginResourceClient* resource_client =
- delegate_->CreateResourceClient(clients_[i].id, plugin_url_, 0);
- clients_[i].client = resource_client;
- client = resource_client;
- break;
- }
- }
-
- DCHECK(client != NULL);
- }
- }
-
// Calling into a plugin could result in reentrancy if the plugin yields
// control to the OS like entering a modal loop etc. Prevent this by
// stopping further loading until the plugin notifies us that it is ready to
@@ -1063,7 +925,7 @@ void WebPluginImpl::didReceiveResponse(WebURLLoader* loader,
GetAllHeaders(response),
response_info.expected_length,
response_info.last_modified,
- request_is_seekable);
+ true);
// Bug http://b/issue?id=925559. The flash plugin would not handle the HTTP
// error codes in the stream header and as a result, was unaware of the
@@ -1161,121 +1023,6 @@ void WebPluginImpl::SetContainer(WebPluginContainer* container) {
container_->allowScriptObjects();
}
-void WebPluginImpl::HandleURLRequest(const char* url,
- const char* method,
- const char* target,
- const char* buf,
- unsigned int len,
- int notify_id,
- bool popups_allowed,
- bool notify_redirects) {
- // GetURL/PostURL requests initiated explicitly by plugins should specify the
- // plugin SRC url as the referrer if it is available.
- HandleURLRequestInternal(
- url, method, target, buf, len, notify_id, popups_allowed, PLUGIN_SRC,
- notify_redirects, false);
-}
-
-void WebPluginImpl::HandleURLRequestInternal(const char* url,
- const char* method,
- const char* target,
- const char* buf,
- unsigned int len,
- int notify_id,
- bool popups_allowed,
- ReferrerValue referrer_flag,
- bool notify_redirects,
- bool is_plugin_src_load) {
- // For this request, we either route the output to a frame
- // because a target has been specified, or we handle the request
- // here, i.e. by executing the script if it is a javascript url
- // or by initiating a download on the URL, etc. There is one special
- // case in that the request is a javascript url and the target is "_self",
- // in which case we route the output to the plugin rather than routing it
- // to the plugin's frame.
- bool is_javascript_url =
- url::FindAndCompareScheme(url, strlen(url), url::kJavaScriptScheme, NULL);
- RoutingStatus routing_status = RouteToFrame(
- url, is_javascript_url, popups_allowed, method, target, buf, len,
- notify_id, referrer_flag);
- if (routing_status == ROUTED)
- return;
-
- if (is_javascript_url) {
- GURL gurl(url);
- WebString result = container_->executeScriptURL(gurl, popups_allowed);
-
- // delegate_ could be NULL because executeScript caused the container to
- // be deleted.
- if (delegate_) {
- delegate_->SendJavaScriptStream(
- gurl, result.utf8(), !result.isNull(), notify_id);
- }
-
- return;
- }
-
- unsigned long resource_id = GetNextResourceId();
- if (!resource_id)
- return;
-
- GURL complete_url = CompleteURL(url);
- // Remove when flash bug is fixed. http://crbug.com/40016.
- if (!WebPluginImpl::IsValidUrl(complete_url, referrer_flag))
- return;
-
- // If the RouteToFrame call returned a failure then inform the result
- // back to the plugin asynchronously.
- if ((routing_status == INVALID_URL) ||
- (routing_status == GENERAL_FAILURE)) {
- WebPluginResourceClient* resource_client = delegate_->CreateResourceClient(
- resource_id, complete_url, notify_id);
- if (resource_client)
- resource_client->DidFail(resource_id);
- return;
- }
-
- // CreateResourceClient() sends a synchronous IPC message so it's possible
- // that TearDownPluginInstance() may have been called in the nested
- // message loop. If so, don't start the request.
- if (!delegate_)
- return;
-
- if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kDisableDirectNPAPIRequests)) {
- // We got here either because the plugin called GetURL/PostURL, or because
- // we're fetching the data for an embed tag. If we're in multi-process mode,
- // we want to fetch the data in the plugin process as the renderer won't be
- // able to request any origin when site isolation is in place. So bounce
- // this request back to the plugin process which will use ResourceDispatcher
- // to fetch the url.
-
- // TODO(jam): any better way of getting this? Can't find a way to get
- // frame()->loader()->outgoingReferrer() which
- // WebFrameImpl::setReferrerForRequest does.
- WebURLRequest request(complete_url);
- SetReferrer(&request, referrer_flag);
- Referrer referrer(
- GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))),
- request.referrerPolicy());
-
- GURL first_party_for_cookies = webframe_->document().firstPartyForCookies();
- delegate_->FetchURL(resource_id, notify_id, complete_url,
- first_party_for_cookies, method, buf, len, referrer,
- notify_redirects, is_plugin_src_load, 0,
- render_frame_->GetRoutingID(),
- render_view_->GetRoutingID());
- } else {
- WebPluginResourceClient* resource_client = delegate_->CreateResourceClient(
- resource_id, complete_url, notify_id);
- if (!resource_client)
- return;
- InitiateHTTPRequest(resource_id, resource_client, complete_url, method, buf,
- len, NULL, referrer_flag, notify_redirects,
- is_plugin_src_load);
- }
-}
-
unsigned long WebPluginImpl::GetNextResourceId() {
if (!webframe_)
return 0;
@@ -1285,67 +1032,6 @@ unsigned long WebPluginImpl::GetNextResourceId() {
return view->createUniqueIdentifierForRequest();
}
-bool WebPluginImpl::InitiateHTTPRequest(unsigned long resource_id,
- WebPluginResourceClient* client,
- const GURL& url,
- const char* method,
- const char* buf,
- int buf_len,
- const char* range_info,
- ReferrerValue referrer_flag,
- bool notify_redirects,
- bool is_plugin_src_load) {
- if (!client) {
- NOTREACHED();
- return false;
- }
-
- ClientInfo info;
- info.id = resource_id;
- info.client = client;
- info.request.initialize();
- info.request.setURL(url);
- info.request.setFirstPartyForCookies(
- webframe_->document().firstPartyForCookies());
- info.request.setRequestorProcessID(delegate_->GetProcessId());
- // TODO(mkwst): Is this a request for a plugin object itself
- // (RequestContextObject), or a request that the plugin makes
- // (RequestContextPlugin)?
- info.request.setRequestContext(WebURLRequest::RequestContextPlugin);
- info.request.setHTTPMethod(WebString::fromUTF8(method));
- // ServiceWorker is disabled for NPAPI.
- info.request.setSkipServiceWorker(true);
- info.pending_failure_notification = false;
- info.notify_redirects = notify_redirects;
- info.is_plugin_src_load = is_plugin_src_load;
- info.data_offset = 0;
-
- if (range_info) {
- info.request.addHTTPHeaderField(WebString::fromUTF8("Range"),
- WebString::fromUTF8(range_info));
- }
-
- if (strcmp(method, "POST") == 0) {
- // Adds headers or form data to a request. This must be called before
- // we initiate the actual request.
- SetPostData(&info.request, buf, buf_len);
- }
-
- SetReferrer(&info.request, referrer_flag);
-
- WebURLLoaderOptions options;
- options.allowCredentials = true;
- options.crossOriginRequestPolicy =
- WebURLLoaderOptions::CrossOriginRequestPolicyAllow;
- info.loader.reset(webframe_->createAssociatedURLLoader(options));
- if (!info.loader.get())
- return false;
- info.loader->loadAsynchronously(info.request, &loader_client_);
-
- clients_.push_back(info);
- return true;
-}
-
void WebPluginImpl::CancelDocumentLoad() {
if (webframe_) {
ignore_response_error_ = true;
@@ -1353,25 +1039,6 @@ void WebPluginImpl::CancelDocumentLoad() {
}
}
-void WebPluginImpl::InitiateHTTPRangeRequest(
- const char* url, const char* range_info, int range_request_id) {
- unsigned long resource_id = GetNextResourceId();
- if (!resource_id)
- return;
-
- GURL complete_url = CompleteURL(url);
- // Remove when flash bug is fixed. http://crbug.com/40016.
- if (!WebPluginImpl::IsValidUrl(complete_url,
- load_manually_ ? NO_REFERRER : PLUGIN_SRC))
- return;
-
- WebPluginResourceClient* resource_client =
- delegate_->CreateSeekableResourceClient(resource_id, range_request_id);
- InitiateHTTPRequest(
- resource_id, resource_client, complete_url, "GET", NULL, 0, range_info,
- load_manually_ ? NO_REFERRER : PLUGIN_SRC, false, false);
-}
-
void WebPluginImpl::DidStartLoading() {
if (render_view_.get()) {
// TODO(darin): Make is_loading_ be a counter!
@@ -1539,7 +1206,6 @@ void WebPluginImpl::TearDownPluginInstance(
// This needs to be called now and not in the destructor since the
// webframe_ might not be valid anymore.
webframe_ = NULL;
- weak_factory_.InvalidateWeakPtrs();
}
void WebPluginImpl::SetReferrer(blink::WebURLRequest* request,
« no previous file with comments | « content/renderer/npapi/webplugin_impl.h ('k') | content/renderer/pepper/pepper_plugin_instance_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698