| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/memory/scoped_vector.h" | 8 #include "base/memory/scoped_vector.h" |
| 9 #include "chrome/browser/ui/browser.h" | 9 #include "chrome/browser/ui/browser.h" |
| 10 #include "chrome/browser/ui/browser_navigator.h" | 10 #include "chrome/browser/ui/browser_navigator.h" |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 | 145 |
| 146 // A view that contains all service buttons (i.e. the installed services). | 146 // A view that contains all service buttons (i.e. the installed services). |
| 147 class ServiceButtonsView : public views::View, | 147 class ServiceButtonsView : public views::View, |
| 148 public views::ButtonListener { | 148 public views::ButtonListener { |
| 149 public: | 149 public: |
| 150 class Delegate { | 150 class Delegate { |
| 151 public: | 151 public: |
| 152 // Called when a service button is clicked. |index| is the index of the | 152 // Called when a service button is clicked. |index| is the index of the |
| 153 // service button in the model. | 153 // service button in the model. |
| 154 virtual void OnServiceButtonClicked( | 154 virtual void OnServiceButtonClicked( |
| 155 size_t index, | |
| 156 const WebIntentPickerModel::InstalledService& service) = 0; | 155 const WebIntentPickerModel::InstalledService& service) = 0; |
| 157 | 156 |
| 158 protected: | 157 protected: |
| 159 virtual ~Delegate() {} | 158 virtual ~Delegate() {} |
| 160 }; | 159 }; |
| 161 | 160 |
| 162 ServiceButtonsView(const WebIntentPickerModel* model, Delegate* delegate); | 161 ServiceButtonsView(const WebIntentPickerModel* model, Delegate* delegate); |
| 163 virtual ~ServiceButtonsView(); | 162 virtual ~ServiceButtonsView(); |
| 164 | 163 |
| 165 // Updates the service button view with new model data. | 164 // Updates the service button view with new model data. |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 } | 217 } |
| 219 | 218 |
| 220 // Add a padding row between the service buttons and the label when there | 219 // Add a padding row between the service buttons and the label when there |
| 221 // are service buttons to display. | 220 // are service buttons to display. |
| 222 grid_layout->AddPaddingRow(0, kContentAreaSpacing); | 221 grid_layout->AddPaddingRow(0, kContentAreaSpacing); |
| 223 } | 222 } |
| 224 | 223 |
| 225 void ServiceButtonsView::ButtonPressed(views::Button* sender, | 224 void ServiceButtonsView::ButtonPressed(views::Button* sender, |
| 226 const views::Event& event) { | 225 const views::Event& event) { |
| 227 size_t index = static_cast<size_t>(sender->tag()); | 226 size_t index = static_cast<size_t>(sender->tag()); |
| 228 delegate_->OnServiceButtonClicked(index, | 227 delegate_->OnServiceButtonClicked(model_->GetInstalledServiceAt(index)); |
| 229 model_->GetInstalledServiceAt(index)); | |
| 230 } | 228 } |
| 231 | 229 |
| 232 gfx::Size ServiceButtonsView::GetPreferredSize() { | 230 gfx::Size ServiceButtonsView::GetPreferredSize() { |
| 233 // If there are no service buttons, hide this view. | 231 // If there are no service buttons, hide this view. |
| 234 if (model_->GetInstalledServiceCount() == 0) | 232 if (model_->GetInstalledServiceCount() == 0) |
| 235 return gfx::Size(); | 233 return gfx::Size(); |
| 236 return GetLayoutManager()->GetPreferredSize(this); | 234 return GetLayoutManager()->GetPreferredSize(this); |
| 237 } | 235 } |
| 238 | 236 |
| 239 // SuggestedExtensionsView ----------------------------------------------------- | 237 // SuggestedExtensionsView ----------------------------------------------------- |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 | 446 |
| 449 // WebIntentPicker implementation. | 447 // WebIntentPicker implementation. |
| 450 virtual void Close() OVERRIDE; | 448 virtual void Close() OVERRIDE; |
| 451 | 449 |
| 452 // WebIntentPickerModelObserver implementation. | 450 // WebIntentPickerModelObserver implementation. |
| 453 virtual void OnModelChanged(WebIntentPickerModel* model) OVERRIDE; | 451 virtual void OnModelChanged(WebIntentPickerModel* model) OVERRIDE; |
| 454 virtual void OnFaviconChanged(WebIntentPickerModel* model, | 452 virtual void OnFaviconChanged(WebIntentPickerModel* model, |
| 455 size_t index) OVERRIDE; | 453 size_t index) OVERRIDE; |
| 456 virtual void OnExtensionIconChanged(WebIntentPickerModel* model, | 454 virtual void OnExtensionIconChanged(WebIntentPickerModel* model, |
| 457 const string16& extension_id) OVERRIDE; | 455 const string16& extension_id) OVERRIDE; |
| 458 virtual void OnInlineDisposition(WebIntentPickerModel* model) OVERRIDE; | 456 virtual void OnInlineDisposition(WebIntentPickerModel* model, |
| 457 const GURL& url) OVERRIDE; |
| 459 | 458 |
| 460 // ServiceButtonsView::Delegate implementation. | 459 // ServiceButtonsView::Delegate implementation. |
| 461 virtual void OnServiceButtonClicked( | 460 virtual void OnServiceButtonClicked( |
| 462 size_t index, | |
| 463 const WebIntentPickerModel::InstalledService& service) OVERRIDE; | 461 const WebIntentPickerModel::InstalledService& service) OVERRIDE; |
| 464 | 462 |
| 465 // SuggestedExtensionsView::Delegate implementation. | 463 // SuggestedExtensionsView::Delegate implementation. |
| 466 virtual void OnExtensionInstallClicked(const string16& extension_id) OVERRIDE; | 464 virtual void OnExtensionInstallClicked(const string16& extension_id) OVERRIDE; |
| 467 virtual void OnExtensionLinkClicked(const string16& extension_id) OVERRIDE; | 465 virtual void OnExtensionLinkClicked(const string16& extension_id) OVERRIDE; |
| 468 virtual void OnMoreSuggestionsLinkClicked() OVERRIDE; | 466 virtual void OnMoreSuggestionsLinkClicked() OVERRIDE; |
| 469 | 467 |
| 470 private: | 468 private: |
| 471 // Initialize the contents of the picker. After this call, contents_ will be | 469 // Initialize the contents of the picker. After this call, contents_ will be |
| 472 // non-NULL. | 470 // non-NULL. |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 | 594 |
| 597 void WebIntentPickerViews::OnExtensionIconChanged( | 595 void WebIntentPickerViews::OnExtensionIconChanged( |
| 598 WebIntentPickerModel* model, | 596 WebIntentPickerModel* model, |
| 599 const string16& extension_id) { | 597 const string16& extension_id) { |
| 600 extensions_->Update(); | 598 extensions_->Update(); |
| 601 contents_->Layout(); | 599 contents_->Layout(); |
| 602 SizeToContents(); | 600 SizeToContents(); |
| 603 } | 601 } |
| 604 | 602 |
| 605 void WebIntentPickerViews::OnInlineDisposition( | 603 void WebIntentPickerViews::OnInlineDisposition( |
| 606 WebIntentPickerModel* model) { | 604 WebIntentPickerModel* model, const GURL& url) { |
| 607 const WebIntentPickerModel::InstalledService& installed_service = | |
| 608 model->GetInstalledServiceAt(model->inline_disposition_index()); | |
| 609 | |
| 610 WebContents* web_contents = WebContents::Create( | 605 WebContents* web_contents = WebContents::Create( |
| 611 browser_->profile(), NULL, MSG_ROUTING_NONE, NULL, NULL); | 606 browser_->profile(), NULL, MSG_ROUTING_NONE, NULL, NULL); |
| 612 inline_disposition_delegate_.reset(new WebIntentInlineDispositionDelegate); | 607 inline_disposition_delegate_.reset(new WebIntentInlineDispositionDelegate); |
| 613 web_contents->SetDelegate(inline_disposition_delegate_.get()); | 608 web_contents->SetDelegate(inline_disposition_delegate_.get()); |
| 614 | 609 |
| 615 // Must call this immediately after WebContents creation to avoid race | 610 // Must call this immediately after WebContents creation to avoid race |
| 616 // with load. | 611 // with load. |
| 617 delegate_->OnInlineDispositionWebContentsCreated(web_contents); | 612 delegate_->OnInlineDispositionWebContentsCreated(web_contents); |
| 618 | 613 |
| 619 TabContentsContainer* tab_contents_container = new TabContentsContainer; | 614 TabContentsContainer* tab_contents_container = new TabContentsContainer; |
| 620 | 615 |
| 621 web_contents->GetController().LoadURL( | 616 web_contents->GetController().LoadURL( |
| 622 installed_service.url, | 617 url, |
| 623 content::Referrer(), | 618 content::Referrer(), |
| 624 content::PAGE_TRANSITION_START_PAGE, | 619 content::PAGE_TRANSITION_START_PAGE, |
| 625 std::string()); | 620 std::string()); |
| 626 | 621 |
| 627 // Replace the picker with the inline disposition. | 622 // Replace the picker with the inline disposition. |
| 628 contents_->RemoveAllChildViews(true); | 623 contents_->RemoveAllChildViews(true); |
| 629 contents_->AddChildView(tab_contents_container); | 624 contents_->AddChildView(tab_contents_container); |
| 630 | 625 |
| 631 // The contents can only be changed after the child is added to view | 626 // The contents can only be changed after the child is added to view |
| 632 // hierarchy. | 627 // hierarchy. |
| 633 tab_contents_container->ChangeWebContents(web_contents); | 628 tab_contents_container->ChangeWebContents(web_contents); |
| 634 | 629 |
| 635 gfx::Size size = GetDefaultInlineDispositionSize(web_contents); | 630 gfx::Size size = GetDefaultInlineDispositionSize(web_contents); |
| 636 contents_->SetLayoutManager(new views::FillLayout); | 631 contents_->SetLayoutManager(new views::FillLayout); |
| 637 contents_->Layout(); | 632 contents_->Layout(); |
| 638 SizeToContents(); | 633 SizeToContents(); |
| 639 } | 634 } |
| 640 | 635 |
| 641 void WebIntentPickerViews::OnServiceButtonClicked( | 636 void WebIntentPickerViews::OnServiceButtonClicked( |
| 642 size_t index, | |
| 643 const WebIntentPickerModel::InstalledService& service) { | 637 const WebIntentPickerModel::InstalledService& service) { |
| 644 delegate_->OnServiceChosen(index, service.disposition); | 638 delegate_->OnServiceChosen(service.url, service.disposition); |
| 645 } | 639 } |
| 646 | 640 |
| 647 void WebIntentPickerViews::OnExtensionInstallClicked( | 641 void WebIntentPickerViews::OnExtensionInstallClicked( |
| 648 const string16& extension_id) { | 642 const string16& extension_id) { |
| 649 // TODO(binji): install extension. | 643 // TODO(binji): install extension. |
| 650 } | 644 } |
| 651 | 645 |
| 652 void WebIntentPickerViews::OnExtensionLinkClicked( | 646 void WebIntentPickerViews::OnExtensionLinkClicked( |
| 653 const string16& extension_id) { | 647 const string16& extension_id) { |
| 654 GURL extension_url(extension_urls::GetWebstoreItemDetailURLPrefix() + | 648 GURL extension_url(extension_urls::GetWebstoreItemDetailURLPrefix() + |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 } | 731 } |
| 738 | 732 |
| 739 void WebIntentPickerViews::SizeToContents() { | 733 void WebIntentPickerViews::SizeToContents() { |
| 740 gfx::Size client_size = contents_->GetPreferredSize(); | 734 gfx::Size client_size = contents_->GetPreferredSize(); |
| 741 gfx::Rect client_bounds(client_size); | 735 gfx::Rect client_bounds(client_size); |
| 742 gfx::Rect new_window_bounds = window_->non_client_view()->frame_view()-> | 736 gfx::Rect new_window_bounds = window_->non_client_view()->frame_view()-> |
| 743 GetWindowBoundsForClientBounds(client_bounds); | 737 GetWindowBoundsForClientBounds(client_bounds); |
| 744 // TODO(binji): figure out how to get the constrained dialog centered... | 738 // TODO(binji): figure out how to get the constrained dialog centered... |
| 745 window_->SetSize(new_window_bounds.size()); | 739 window_->SetSize(new_window_bounds.size()); |
| 746 } | 740 } |
| OLD | NEW |