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

Unified Diff: chrome/browser/plugin_process_host.cc

Issue 14142: Start using the proxy resolve IPC for plugins.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/plugin_process_host.h ('k') | chrome/browser/resource_message_filter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/plugin_process_host.cc
===================================================================
--- chrome/browser/plugin_process_host.cc (revision 8931)
+++ chrome/browser/plugin_process_host.cc (working copy)
@@ -37,7 +37,6 @@
#include "chrome/common/win_util.h"
#include "net/base/cookie_monster.h"
#include "net/base/io_buffer.h"
-#include "net/proxy/proxy_service.h"
#include "net/url_request/url_request.h"
#include "sandbox/src/sandbox.h"
#include "webkit/glue/plugins/plugin_constants_win.h"
@@ -300,57 +299,6 @@
delete this;
}
-// The following class is a helper to handle ProxyResolve IPC requests.
-// It is responsible for initiating an asynchronous proxy resolve request,
-// and will send out the IPC response on completion then delete itself.
-// Should the PluginProcessHost be destroyed while a proxy resolve request
-// is in progress, the request will not be canceled. However once it completes
-// it will see that it has been revoked and delete itself.
-// TODO(eroman): This could leak if ProxyService is deleted while request is
-// outstanding.
-class PluginResolveProxyHelper : RevocableStore::Revocable {
- public:
- // Create a helper that writes its response through |plugin_host|.
- PluginResolveProxyHelper(PluginProcessHost* plugin_host)
- : RevocableStore::Revocable(&plugin_host->revocable_store_),
- plugin_host_(plugin_host),
- reply_msg_(NULL),
- ALLOW_THIS_IN_INITIALIZER_LIST(callback_(
- this, &PluginResolveProxyHelper::OnProxyResolveCompleted)) {
- }
-
- // Completion callback for ProxyService.
- void OnProxyResolveCompleted(int result) {
- if (!revoked()) {
- PluginProcessHostMsg_ResolveProxy::WriteReplyParams(
- reply_msg_, result, proxy_info_.GetAnnotatedProxyList());
- plugin_host_->Send(reply_msg_);
- }
-
- delete this;
- };
-
- // Resolve the proxy for |url| using |proxy_service|. Write the response
- // to |reply_msg|.
- void Start(net::ProxyService* proxy_service,
- const GURL& url,
- IPC::Message* reply_msg) {
- reply_msg_ = reply_msg;
- int rv = proxy_service->ResolveProxy(
- url, &proxy_info_, &callback_, NULL);
- if (rv != net::ERR_IO_PENDING)
- OnProxyResolveCompleted(rv);
- }
-
- private:
- // |plugin_host_| is only valid if !this->revoked().
- PluginProcessHost* plugin_host_;
- IPC::Message* reply_msg_;
- net::CompletionCallbackImpl<PluginResolveProxyHelper> callback_;
- net::ProxyInfo proxy_info_;
-};
-
-
// Sends the reply to the create window message on the IO thread.
class SendReplyTask : public Task {
public:
@@ -435,6 +383,7 @@
: process_(NULL),
opening_channel_(false),
resource_dispatcher_host_(plugin_service->resource_dispatcher_host()),
+ ALLOW_THIS_IN_INITIALIZER_LIST(resolve_proxy_msg_helper_(this, NULL)),
plugin_service_(plugin_service) {
DCHECK(resource_dispatcher_host_);
}
@@ -814,13 +763,15 @@
void PluginProcessHost::OnResolveProxy(const GURL& url,
IPC::Message* reply_msg) {
- // Use the default profile's proxy service.
- net::ProxyService* proxy_service =
- Profile::GetDefaultRequestContext()->proxy_service();
+ resolve_proxy_msg_helper_.Start(url, reply_msg);
+}
- // Kick off a proxy resolve request; writes the response to |reply_msg|
- // on completion. The helper's storage will be deleted on completion.
- (new PluginResolveProxyHelper(this))->Start(proxy_service, url, reply_msg);
+void PluginProcessHost::OnResolveProxyCompleted(IPC::Message* reply_msg,
+ int result,
+ const std::string& proxy_list) {
+ PluginProcessHostMsg_ResolveProxy::WriteReplyParams(
+ reply_msg, result, proxy_list);
+ Send(reply_msg);
}
void PluginProcessHost::ReplyToRenderer(
« no previous file with comments | « chrome/browser/plugin_process_host.h ('k') | chrome/browser/resource_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698