Index: chrome/browser/automation/automation_provider.cc |
diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc |
index 1d2205c5047af52476ab54d6df4b9ba8e7fd1c3c..a48ad44561f5685747dd3208a7c9139d20d3b738 100644 |
--- a/chrome/browser/automation/automation_provider.cc |
+++ b/chrome/browser/automation/automation_provider.cc |
@@ -6,6 +6,7 @@ |
#include <set> |
+#include "base/bind.h" |
#include "base/callback.h" |
#include "base/command_line.h" |
#include "base/debug/trace_event.h" |
@@ -106,6 +107,66 @@ using content::BrowserThread; |
using WebKit::WebFindOptions; |
using base::Time; |
+namespace { |
+ |
+void PopulateProxyConfig(const DictionaryValue& dict, net::ProxyConfig* pc) { |
+ DCHECK(pc); |
+ bool no_proxy = false; |
+ if (dict.GetBoolean(automation::kJSONProxyNoProxy, &no_proxy)) { |
+ // Make no changes to the ProxyConfig. |
+ return; |
+ } |
+ bool auto_config; |
+ if (dict.GetBoolean(automation::kJSONProxyAutoconfig, &auto_config)) { |
+ pc->set_auto_detect(true); |
+ } |
+ std::string pac_url; |
+ if (dict.GetString(automation::kJSONProxyPacUrl, &pac_url)) { |
+ pc->set_pac_url(GURL(pac_url)); |
+ } |
+ bool pac_mandatory; |
+ if (dict.GetBoolean(automation::kJSONProxyPacMandatory, &pac_mandatory)) { |
+ pc->set_pac_mandatory(pac_mandatory); |
+ } |
+ std::string proxy_bypass_list; |
+ if (dict.GetString(automation::kJSONProxyBypassList, &proxy_bypass_list)) { |
+ pc->proxy_rules().bypass_rules.ParseFromString(proxy_bypass_list); |
+ } |
+ std::string proxy_server; |
+ if (dict.GetString(automation::kJSONProxyServer, &proxy_server)) { |
+ pc->proxy_rules().ParseFromString(proxy_server); |
+ } |
+} |
+ |
+void SetProxyConfigCallback( |
+ const scoped_refptr<net::URLRequestContextGetter>& request_context_getter, |
+ const std::string& proxy_config) { |
+ // First, deserialize the JSON string. If this fails, log and bail. |
+ JSONStringValueSerializer deserializer(proxy_config); |
+ std::string error_msg; |
+ scoped_ptr<Value> root(deserializer.Deserialize(NULL, &error_msg)); |
+ if (!root.get() || root->GetType() != Value::TYPE_DICTIONARY) { |
+ DLOG(WARNING) << "Received bad JSON string for ProxyConfig: " |
+ << error_msg; |
+ return; |
+ } |
+ |
+ scoped_ptr<DictionaryValue> dict( |
+ static_cast<DictionaryValue*>(root.release())); |
+ // Now put together a proxy configuration from the deserialized string. |
+ net::ProxyConfig pc; |
+ PopulateProxyConfig(*dict.get(), &pc); |
+ |
+ net::ProxyService* proxy_service = |
+ request_context_getter->GetURLRequestContext()->proxy_service(); |
+ DCHECK(proxy_service); |
+ scoped_ptr<net::ProxyConfigService> proxy_config_service( |
+ new net::ProxyConfigServiceFixed(pc)); |
+ proxy_service->ResetConfigService(proxy_config_service.release()); |
+} |
+ |
+} // namespace |
+ |
AutomationProvider::AutomationProvider(Profile* profile) |
: profile_(profile), |
reply_message_(NULL), |
@@ -431,24 +492,6 @@ void AutomationProvider::OnMessageDeserializationFailure() { |
channel_->Close(); |
} |
-// This task just adds another task to the event queue. This is useful if |
-// you want to ensure that any tasks added to the event queue after this one |
-// have already been processed by the time |task| is run. |
-class InvokeTaskLaterTask : public Task { |
- public: |
- explicit InvokeTaskLaterTask(Task* task) : task_(task) {} |
- virtual ~InvokeTaskLaterTask() {} |
- |
- virtual void Run() { |
- MessageLoop::current()->PostTask(FROM_HERE, task_); |
- } |
- |
- private: |
- Task* task_; |
- |
- DISALLOW_COPY_AND_ASSIGN(InvokeTaskLaterTask); |
-}; |
- |
void AutomationProvider::HandleUnused(const IPC::Message& message, int handle) { |
if (window_tracker_->ContainsHandle(handle)) { |
window_tracker_->Remove(window_tracker_->GetResource(handle)); |
@@ -542,72 +585,6 @@ void AutomationProvider::SendFindRequest( |
options); |
} |
-class SetProxyConfigTask : public Task { |
- public: |
- SetProxyConfigTask(net::URLRequestContextGetter* request_context_getter, |
- const std::string& new_proxy_config) |
- : request_context_getter_(request_context_getter), |
- proxy_config_(new_proxy_config) {} |
- virtual void Run() { |
- // First, deserialize the JSON string. If this fails, log and bail. |
- JSONStringValueSerializer deserializer(proxy_config_); |
- std::string error_msg; |
- scoped_ptr<Value> root(deserializer.Deserialize(NULL, &error_msg)); |
- if (!root.get() || root->GetType() != Value::TYPE_DICTIONARY) { |
- DLOG(WARNING) << "Received bad JSON string for ProxyConfig: " |
- << error_msg; |
- return; |
- } |
- |
- scoped_ptr<DictionaryValue> dict( |
- static_cast<DictionaryValue*>(root.release())); |
- // Now put together a proxy configuration from the deserialized string. |
- net::ProxyConfig pc; |
- PopulateProxyConfig(*dict.get(), &pc); |
- |
- net::ProxyService* proxy_service = |
- request_context_getter_->GetURLRequestContext()->proxy_service(); |
- DCHECK(proxy_service); |
- scoped_ptr<net::ProxyConfigService> proxy_config_service( |
- new net::ProxyConfigServiceFixed(pc)); |
- proxy_service->ResetConfigService(proxy_config_service.release()); |
- } |
- |
- void PopulateProxyConfig(const DictionaryValue& dict, net::ProxyConfig* pc) { |
- DCHECK(pc); |
- bool no_proxy = false; |
- if (dict.GetBoolean(automation::kJSONProxyNoProxy, &no_proxy)) { |
- // Make no changes to the ProxyConfig. |
- return; |
- } |
- bool auto_config; |
- if (dict.GetBoolean(automation::kJSONProxyAutoconfig, &auto_config)) { |
- pc->set_auto_detect(true); |
- } |
- std::string pac_url; |
- if (dict.GetString(automation::kJSONProxyPacUrl, &pac_url)) { |
- pc->set_pac_url(GURL(pac_url)); |
- } |
- bool pac_mandatory; |
- if (dict.GetBoolean(automation::kJSONProxyPacMandatory, &pac_mandatory)) { |
- pc->set_pac_mandatory(pac_mandatory); |
- } |
- std::string proxy_bypass_list; |
- if (dict.GetString(automation::kJSONProxyBypassList, &proxy_bypass_list)) { |
- pc->proxy_rules().bypass_rules.ParseFromString(proxy_bypass_list); |
- } |
- std::string proxy_server; |
- if (dict.GetString(automation::kJSONProxyServer, &proxy_server)) { |
- pc->proxy_rules().ParseFromString(proxy_server); |
- } |
- } |
- |
- private: |
- scoped_refptr<net::URLRequestContextGetter> request_context_getter_; |
- std::string proxy_config_; |
-}; |
- |
- |
void AutomationProvider::SetProxyConfig(const std::string& new_proxy_config) { |
net::URLRequestContextGetter* context_getter = |
profile_->GetRequestContext(); |
@@ -615,7 +592,8 @@ void AutomationProvider::SetProxyConfig(const std::string& new_proxy_config) { |
BrowserThread::PostTask( |
BrowserThread::IO, FROM_HERE, |
- new SetProxyConfigTask(context_getter, new_proxy_config)); |
+ base::Bind(SetProxyConfigCallback, make_scoped_refptr(context_getter), |
+ new_proxy_config)); |
} |
TabContents* AutomationProvider::GetTabContentsForHandle( |