OLD | NEW |
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 "chrome/browser/ui/intents/web_intent_picker_controller.h" | 5 #include "chrome/browser/ui/intents/web_intent_picker_controller.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 } // namespace | 140 } // namespace |
141 | 141 |
142 WebIntentPickerController::WebIntentPickerController( | 142 WebIntentPickerController::WebIntentPickerController( |
143 TabContents* tab_contents) | 143 TabContents* tab_contents) |
144 : tab_contents_(tab_contents), | 144 : tab_contents_(tab_contents), |
145 picker_(NULL), | 145 picker_(NULL), |
146 picker_model_(new WebIntentPickerModel()), | 146 picker_model_(new WebIntentPickerModel()), |
147 pending_async_count_(0), | 147 pending_async_count_(0), |
148 pending_registry_calls_count_(0), | 148 pending_registry_calls_count_(0), |
149 picker_shown_(false), | 149 picker_shown_(false), |
| 150 window_disposition_target_(false), |
150 intents_dispatcher_(NULL), | 151 intents_dispatcher_(NULL), |
151 service_tab_(NULL), | 152 service_tab_(NULL), |
152 weak_ptr_factory_(this) { | 153 weak_ptr_factory_(this) { |
153 content::NavigationController* controller = | 154 content::NavigationController* controller = |
154 &tab_contents->web_contents()->GetController(); | 155 &tab_contents->web_contents()->GetController(); |
155 registrar_.Add(this, content::NOTIFICATION_LOAD_START, | 156 registrar_.Add(this, content::NOTIFICATION_LOAD_START, |
156 content::Source<content::NavigationController>(controller)); | 157 content::Source<content::NavigationController>(controller)); |
157 registrar_.Add(this, chrome::NOTIFICATION_TAB_CLOSING, | 158 registrar_.Add(this, chrome::NOTIFICATION_TAB_CLOSING, |
158 content::Source<content::NavigationController>(controller)); | 159 content::Source<content::NavigationController>(controller)); |
159 } | 160 } |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 GetWebIntentsRegistry(tab_contents_)->GetDefaultIntentService( | 241 GetWebIntentsRegistry(tab_contents_)->GetDefaultIntentService( |
241 action, type, invoking_url, | 242 action, type, invoking_url, |
242 base::Bind(&WebIntentPickerController::OnWebIntentDefaultsAvailable, | 243 base::Bind(&WebIntentPickerController::OnWebIntentDefaultsAvailable, |
243 weak_ptr_factory_.GetWeakPtr())); | 244 weak_ptr_factory_.GetWeakPtr())); |
244 } | 245 } |
245 | 246 |
246 GetCWSIntentsRegistry(tab_contents_)->GetIntentServices( | 247 GetCWSIntentsRegistry(tab_contents_)->GetIntentServices( |
247 action, type, | 248 action, type, |
248 base::Bind(&WebIntentPickerController::OnCWSIntentServicesAvailable, | 249 base::Bind(&WebIntentPickerController::OnCWSIntentServicesAvailable, |
249 weak_ptr_factory_.GetWeakPtr())); | 250 weak_ptr_factory_.GetWeakPtr())); |
250 } | 251 } |
251 | 252 |
252 void WebIntentPickerController::Observe( | 253 void WebIntentPickerController::Observe( |
253 int type, | 254 int type, |
254 const content::NotificationSource& source, | 255 const content::NotificationSource& source, |
255 const content::NotificationDetails& details) { | 256 const content::NotificationDetails& details) { |
256 DCHECK(type == content::NOTIFICATION_LOAD_START || | 257 DCHECK(type == content::NOTIFICATION_LOAD_START || |
257 type == chrome::NOTIFICATION_TAB_CLOSING); | 258 type == chrome::NOTIFICATION_TAB_CLOSING); |
258 ClosePicker(); | 259 ClosePicker(); |
259 } | 260 } |
260 | 261 |
(...skipping 23 matching lines...) Expand all Loading... |
284 | 285 |
285 case WebIntentPickerModel::DISPOSITION_WINDOW: { | 286 case WebIntentPickerModel::DISPOSITION_WINDOW: { |
286 Browser* browser = browser::FindBrowserWithWebContents( | 287 Browser* browser = browser::FindBrowserWithWebContents( |
287 tab_contents_->web_contents()); | 288 tab_contents_->web_contents()); |
288 TabContents* contents = chrome::TabContentsFactory( | 289 TabContents* contents = chrome::TabContentsFactory( |
289 tab_contents_->profile(), | 290 tab_contents_->profile(), |
290 tab_util::GetSiteInstanceForNewTab( | 291 tab_util::GetSiteInstanceForNewTab( |
291 tab_contents_->profile(), url), | 292 tab_contents_->profile(), url), |
292 MSG_ROUTING_NONE, NULL, NULL); | 293 MSG_ROUTING_NONE, NULL, NULL); |
293 | 294 |
| 295 // Let the controller for the target TabContents know that it is hosting a |
| 296 // web intents service. |
| 297 contents->web_intent_picker_controller()->set_window_disposition_target( |
| 298 true); |
| 299 |
294 intents_dispatcher_->DispatchIntent(contents->web_contents()); | 300 intents_dispatcher_->DispatchIntent(contents->web_contents()); |
295 service_tab_ = contents->web_contents(); | 301 service_tab_ = contents->web_contents(); |
296 | 302 |
297 // This call performs all the tab strip manipulation, notifications, etc. | 303 // This call performs all the tab strip manipulation, notifications, etc. |
298 // Since we're passing in a target_contents, it assumes that we will | 304 // Since we're passing in a target_contents, it assumes that we will |
299 // navigate the page ourselves, though. | 305 // navigate the page ourselves, though. |
300 chrome::NavigateParams params(browser, url, | 306 chrome::NavigateParams params(browser, url, |
301 content::PAGE_TRANSITION_AUTO_BOOKMARK); | 307 content::PAGE_TRANSITION_AUTO_BOOKMARK); |
302 params.target_contents = contents; | 308 params.target_contents = contents; |
303 params.disposition = NEW_FOREGROUND_TAB; | 309 params.disposition = NEW_FOREGROUND_TAB; |
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 const gfx::Image& icon_image) { | 680 const gfx::Image& icon_image) { |
675 picker_model_->SetSuggestedExtensionIconWithId(extension_id, icon_image); | 681 picker_model_->SetSuggestedExtensionIconWithId(extension_id, icon_image); |
676 AsyncOperationFinished(); | 682 AsyncOperationFinished(); |
677 } | 683 } |
678 | 684 |
679 void WebIntentPickerController::OnExtensionIconUnavailable( | 685 void WebIntentPickerController::OnExtensionIconUnavailable( |
680 const string16& extension_id) { | 686 const string16& extension_id) { |
681 AsyncOperationFinished(); | 687 AsyncOperationFinished(); |
682 } | 688 } |
683 | 689 |
| 690 bool WebIntentPickerController::ShowLocationBarPickerTool() { |
| 691 return window_disposition_target_; |
| 692 } |
| 693 |
684 void WebIntentPickerController::OnExtensionInstallServiceAvailable( | 694 void WebIntentPickerController::OnExtensionInstallServiceAvailable( |
685 const std::vector<webkit_glue::WebIntentServiceData>& services) { | 695 const std::vector<webkit_glue::WebIntentServiceData>& services) { |
686 DCHECK(services.size() > 0); | 696 DCHECK(services.size() > 0); |
687 | 697 |
688 // TODO(binji): We're going to need to disambiguate if there are multiple | 698 // TODO(binji): We're going to need to disambiguate if there are multiple |
689 // services. For now, just choose the first. | 699 // services. For now, just choose the first. |
690 const webkit_glue::WebIntentServiceData& service_data = services[0]; | 700 const webkit_glue::WebIntentServiceData& service_data = services[0]; |
691 picker_model_->AddInstalledService( | 701 picker_model_->AddInstalledService( |
692 service_data.title, service_data.service_url, | 702 service_data.title, service_data.service_url, |
693 ConvertDisposition(service_data.disposition)); | 703 ConvertDisposition(service_data.disposition)); |
(...skipping 15 matching lines...) Expand all Loading... |
709 // If picker is non-NULL, it was set by a test. | 719 // If picker is non-NULL, it was set by a test. |
710 if (picker_ == NULL) | 720 if (picker_ == NULL) |
711 picker_ = WebIntentPicker::Create(tab_contents_, this, picker_model_.get()); | 721 picker_ = WebIntentPicker::Create(tab_contents_, this, picker_model_.get()); |
712 picker_shown_ = true; | 722 picker_shown_ = true; |
713 } | 723 } |
714 | 724 |
715 void WebIntentPickerController::ClosePicker() { | 725 void WebIntentPickerController::ClosePicker() { |
716 if (picker_) | 726 if (picker_) |
717 picker_->Close(); | 727 picker_->Close(); |
718 } | 728 } |
OLD | NEW |