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

Side by Side Diff: chrome/browser/automation/automation_provider.cc

Issue 8678018: base::Bind: Convert automation_provider.cc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/automation/automation_provider.h" 5 #include "chrome/browser/automation/automation_provider.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/bind.h"
9 #include "base/callback.h" 10 #include "base/callback.h"
10 #include "base/command_line.h" 11 #include "base/command_line.h"
11 #include "base/debug/trace_event.h" 12 #include "base/debug/trace_event.h"
12 #include "base/file_path.h" 13 #include "base/file_path.h"
13 #include "base/json/json_reader.h" 14 #include "base/json/json_reader.h"
14 #include "base/json/json_value_serializer.h" 15 #include "base/json/json_value_serializer.h"
15 #include "base/json/json_writer.h" 16 #include "base/json/json_writer.h"
16 #include "base/json/string_escape.h" 17 #include "base/json/string_escape.h"
17 #include "base/message_loop.h" 18 #include "base/message_loop.h"
18 #include "base/path_service.h" 19 #include "base/path_service.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 #endif // defined(OS_WIN) 100 #endif // defined(OS_WIN)
100 101
101 #if defined(OS_CHROMEOS) 102 #if defined(OS_CHROMEOS)
102 #include "chrome/browser/chromeos/login/user_manager.h" 103 #include "chrome/browser/chromeos/login/user_manager.h"
103 #endif // defined(OS_CHROMEOS) 104 #endif // defined(OS_CHROMEOS)
104 105
105 using content::BrowserThread; 106 using content::BrowserThread;
106 using WebKit::WebFindOptions; 107 using WebKit::WebFindOptions;
107 using base::Time; 108 using base::Time;
108 109
110 namespace {
111
112 void PopulateProxyConfig(const DictionaryValue& dict, net::ProxyConfig* pc) {
113 DCHECK(pc);
114 bool no_proxy = false;
115 if (dict.GetBoolean(automation::kJSONProxyNoProxy, &no_proxy)) {
116 // Make no changes to the ProxyConfig.
117 return;
118 }
119 bool auto_config;
120 if (dict.GetBoolean(automation::kJSONProxyAutoconfig, &auto_config)) {
121 pc->set_auto_detect(true);
122 }
123 std::string pac_url;
124 if (dict.GetString(automation::kJSONProxyPacUrl, &pac_url)) {
125 pc->set_pac_url(GURL(pac_url));
126 }
127 bool pac_mandatory;
128 if (dict.GetBoolean(automation::kJSONProxyPacMandatory, &pac_mandatory)) {
129 pc->set_pac_mandatory(pac_mandatory);
130 }
131 std::string proxy_bypass_list;
132 if (dict.GetString(automation::kJSONProxyBypassList, &proxy_bypass_list)) {
133 pc->proxy_rules().bypass_rules.ParseFromString(proxy_bypass_list);
134 }
135 std::string proxy_server;
136 if (dict.GetString(automation::kJSONProxyServer, &proxy_server)) {
137 pc->proxy_rules().ParseFromString(proxy_server);
138 }
139 }
140
141 void SetProxyConfigCallback(
142 const scoped_refptr<net::URLRequestContextGetter>& request_context_getter,
143 const std::string& proxy_config) {
144 // First, deserialize the JSON string. If this fails, log and bail.
145 JSONStringValueSerializer deserializer(proxy_config);
146 std::string error_msg;
147 scoped_ptr<Value> root(deserializer.Deserialize(NULL, &error_msg));
148 if (!root.get() || root->GetType() != Value::TYPE_DICTIONARY) {
149 DLOG(WARNING) << "Received bad JSON string for ProxyConfig: "
150 << error_msg;
151 return;
152 }
153
154 scoped_ptr<DictionaryValue> dict(
155 static_cast<DictionaryValue*>(root.release()));
156 // Now put together a proxy configuration from the deserialized string.
157 net::ProxyConfig pc;
158 PopulateProxyConfig(*dict.get(), &pc);
159
160 net::ProxyService* proxy_service =
161 request_context_getter->GetURLRequestContext()->proxy_service();
162 DCHECK(proxy_service);
163 scoped_ptr<net::ProxyConfigService> proxy_config_service(
164 new net::ProxyConfigServiceFixed(pc));
165 proxy_service->ResetConfigService(proxy_config_service.release());
166 }
167
168 } // namespace
169
109 AutomationProvider::AutomationProvider(Profile* profile) 170 AutomationProvider::AutomationProvider(Profile* profile)
110 : profile_(profile), 171 : profile_(profile),
111 reply_message_(NULL), 172 reply_message_(NULL),
112 reinitialize_on_channel_error_( 173 reinitialize_on_channel_error_(
113 CommandLine::ForCurrentProcess()->HasSwitch( 174 CommandLine::ForCurrentProcess()->HasSwitch(
114 switches::kAutomationReinitializeOnChannelError)), 175 switches::kAutomationReinitializeOnChannelError)),
115 is_connected_(false), 176 is_connected_(false),
116 initial_tab_loads_complete_(false), 177 initial_tab_loads_complete_(false),
117 network_library_initialized_(true), 178 network_library_initialized_(true),
118 login_webui_ready_(true) { 179 login_webui_ready_(true) {
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 << "(like ChromeFrame). Closing the automation channel."; 485 << "(like ChromeFrame). Closing the automation channel.";
425 channel_->Close(); 486 channel_->Close();
426 } 487 }
427 488
428 void AutomationProvider::OnMessageDeserializationFailure() { 489 void AutomationProvider::OnMessageDeserializationFailure() {
429 LOG(ERROR) << "Failed to deserialize IPC message. " 490 LOG(ERROR) << "Failed to deserialize IPC message. "
430 << "Closing the automation channel."; 491 << "Closing the automation channel.";
431 channel_->Close(); 492 channel_->Close();
432 } 493 }
433 494
434 // This task just adds another task to the event queue. This is useful if
435 // you want to ensure that any tasks added to the event queue after this one
436 // have already been processed by the time |task| is run.
437 class InvokeTaskLaterTask : public Task {
438 public:
439 explicit InvokeTaskLaterTask(Task* task) : task_(task) {}
440 virtual ~InvokeTaskLaterTask() {}
441
442 virtual void Run() {
443 MessageLoop::current()->PostTask(FROM_HERE, task_);
444 }
445
446 private:
447 Task* task_;
448
449 DISALLOW_COPY_AND_ASSIGN(InvokeTaskLaterTask);
450 };
451
452 void AutomationProvider::HandleUnused(const IPC::Message& message, int handle) { 495 void AutomationProvider::HandleUnused(const IPC::Message& message, int handle) {
453 if (window_tracker_->ContainsHandle(handle)) { 496 if (window_tracker_->ContainsHandle(handle)) {
454 window_tracker_->Remove(window_tracker_->GetResource(handle)); 497 window_tracker_->Remove(window_tracker_->GetResource(handle));
455 } 498 }
456 } 499 }
457 500
458 bool AutomationProvider::ReinitializeChannel() { 501 bool AutomationProvider::ReinitializeChannel() {
459 base::ThreadRestrictions::ScopedAllowIO allow_io; 502 base::ThreadRestrictions::ScopedAllowIO allow_io;
460 503
461 // Make sure any old channels are cleaned up before starting up a new one. 504 // Make sure any old channels are cleaned up before starting up a new one.
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 578
536 WebFindOptions options; 579 WebFindOptions options;
537 options.forward = forward; 580 options.forward = forward;
538 options.matchCase = match_case; 581 options.matchCase = match_case;
539 options.findNext = find_next; 582 options.findNext = find_next;
540 tab_contents->render_view_host()->Find( 583 tab_contents->render_view_host()->Find(
541 FindInPageNotificationObserver::kFindInPageRequestId, search_string, 584 FindInPageNotificationObserver::kFindInPageRequestId, search_string,
542 options); 585 options);
543 } 586 }
544 587
545 class SetProxyConfigTask : public Task {
546 public:
547 SetProxyConfigTask(net::URLRequestContextGetter* request_context_getter,
548 const std::string& new_proxy_config)
549 : request_context_getter_(request_context_getter),
550 proxy_config_(new_proxy_config) {}
551 virtual void Run() {
552 // First, deserialize the JSON string. If this fails, log and bail.
553 JSONStringValueSerializer deserializer(proxy_config_);
554 std::string error_msg;
555 scoped_ptr<Value> root(deserializer.Deserialize(NULL, &error_msg));
556 if (!root.get() || root->GetType() != Value::TYPE_DICTIONARY) {
557 DLOG(WARNING) << "Received bad JSON string for ProxyConfig: "
558 << error_msg;
559 return;
560 }
561
562 scoped_ptr<DictionaryValue> dict(
563 static_cast<DictionaryValue*>(root.release()));
564 // Now put together a proxy configuration from the deserialized string.
565 net::ProxyConfig pc;
566 PopulateProxyConfig(*dict.get(), &pc);
567
568 net::ProxyService* proxy_service =
569 request_context_getter_->GetURLRequestContext()->proxy_service();
570 DCHECK(proxy_service);
571 scoped_ptr<net::ProxyConfigService> proxy_config_service(
572 new net::ProxyConfigServiceFixed(pc));
573 proxy_service->ResetConfigService(proxy_config_service.release());
574 }
575
576 void PopulateProxyConfig(const DictionaryValue& dict, net::ProxyConfig* pc) {
577 DCHECK(pc);
578 bool no_proxy = false;
579 if (dict.GetBoolean(automation::kJSONProxyNoProxy, &no_proxy)) {
580 // Make no changes to the ProxyConfig.
581 return;
582 }
583 bool auto_config;
584 if (dict.GetBoolean(automation::kJSONProxyAutoconfig, &auto_config)) {
585 pc->set_auto_detect(true);
586 }
587 std::string pac_url;
588 if (dict.GetString(automation::kJSONProxyPacUrl, &pac_url)) {
589 pc->set_pac_url(GURL(pac_url));
590 }
591 bool pac_mandatory;
592 if (dict.GetBoolean(automation::kJSONProxyPacMandatory, &pac_mandatory)) {
593 pc->set_pac_mandatory(pac_mandatory);
594 }
595 std::string proxy_bypass_list;
596 if (dict.GetString(automation::kJSONProxyBypassList, &proxy_bypass_list)) {
597 pc->proxy_rules().bypass_rules.ParseFromString(proxy_bypass_list);
598 }
599 std::string proxy_server;
600 if (dict.GetString(automation::kJSONProxyServer, &proxy_server)) {
601 pc->proxy_rules().ParseFromString(proxy_server);
602 }
603 }
604
605 private:
606 scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
607 std::string proxy_config_;
608 };
609
610
611 void AutomationProvider::SetProxyConfig(const std::string& new_proxy_config) { 588 void AutomationProvider::SetProxyConfig(const std::string& new_proxy_config) {
612 net::URLRequestContextGetter* context_getter = 589 net::URLRequestContextGetter* context_getter =
613 profile_->GetRequestContext(); 590 profile_->GetRequestContext();
614 DCHECK(context_getter); 591 DCHECK(context_getter);
615 592
616 BrowserThread::PostTask( 593 BrowserThread::PostTask(
617 BrowserThread::IO, FROM_HERE, 594 BrowserThread::IO, FROM_HERE,
618 new SetProxyConfigTask(context_getter, new_proxy_config)); 595 base::Bind(SetProxyConfigCallback, make_scoped_refptr(context_getter),
596 new_proxy_config));
619 } 597 }
620 598
621 TabContents* AutomationProvider::GetTabContentsForHandle( 599 TabContents* AutomationProvider::GetTabContentsForHandle(
622 int handle, NavigationController** tab) { 600 int handle, NavigationController** tab) {
623 if (tab_tracker_->ContainsHandle(handle)) { 601 if (tab_tracker_->ContainsHandle(handle)) {
624 NavigationController* nav_controller = tab_tracker_->GetResource(handle); 602 NavigationController* nav_controller = tab_tracker_->GetResource(handle);
625 if (tab) 603 if (tab)
626 *tab = nav_controller; 604 *tab = nav_controller;
627 return nav_controller->tab_contents(); 605 return nav_controller->tab_contents();
628 } 606 }
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
1019 } 997 }
1020 } 998 }
1021 } 999 }
1022 1000
1023 void AutomationProvider::SaveAsAsync(int tab_handle) { 1001 void AutomationProvider::SaveAsAsync(int tab_handle) {
1024 NavigationController* tab = NULL; 1002 NavigationController* tab = NULL;
1025 TabContents* tab_contents = GetTabContentsForHandle(tab_handle, &tab); 1003 TabContents* tab_contents = GetTabContentsForHandle(tab_handle, &tab);
1026 if (tab_contents) 1004 if (tab_contents)
1027 tab_contents->OnSavePage(); 1005 tab_contents->OnSavePage();
1028 } 1006 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698