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

Side by Side Diff: chrome/browser/ui/browser.cc

Issue 8526017: Append parameters to webstore URL to indicate launch source. (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
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/ui/browser.h" 5 #include "chrome/browser/ui/browser.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #include <shellapi.h> 9 #include <shellapi.h>
10 #endif // OS_WIN 10 #endif // OS_WIN
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 return true; 243 return true;
244 244
245 // If the |virtual_url()| isn't a chrome:// URL, check if it's actually 245 // If the |virtual_url()| isn't a chrome:// URL, check if it's actually
246 // view-source: of a chrome:// URL. 246 // view-source: of a chrome:// URL.
247 if (entry->virtual_url().SchemeIs(chrome::kViewSourceScheme)) 247 if (entry->virtual_url().SchemeIs(chrome::kViewSourceScheme))
248 return entry->url().SchemeIs(chrome::kChromeUIScheme); 248 return entry->url().SchemeIs(chrome::kChromeUIScheme);
249 249
250 return false; 250 return false;
251 } 251 }
252 252
253 // Get the launch URL for a given extension, with optional override/fallback.
254 // |override_url|, if non-empty, will be preferred over the extension's
255 // launch url.
256 GURL UrlForExtension(const Extension* extension, const GURL& override_url) {
257 if (!extension)
258 return override_url;
259
260 GURL url;
261 if (!override_url.is_empty()) {
262 DCHECK(extension->web_extent().MatchesURL(override_url));
263 url = override_url;
264 } else {
265 url = extension->GetFullLaunchURL();
266 }
267
268 // For extensions lacking launch urls, determine a reasonable fallback.
269 if (!url.is_valid()) {
270 url = extension->options_url();
271 if (!url.is_valid()) {
272 url = GURL(std::string(chrome::kChromeUISettingsURL) +
273 chrome::kExtensionsSubPage);
274 }
275 }
276
277 return url;
278 }
279
253 } // namespace 280 } // namespace
254 281
255 //////////////////////////////////////////////////////////////////////////////// 282 ////////////////////////////////////////////////////////////////////////////////
256 // Browser, CreateParams: 283 // Browser, CreateParams:
257 284
258 Browser::CreateParams::CreateParams(Type type, Profile* profile) 285 Browser::CreateParams::CreateParams(Type type, Profile* profile)
259 : type(type), 286 : type(type),
260 profile(profile) { 287 profile(profile) {
261 } 288 }
262 289
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 profile->GetOffTheRecordProfile()); 603 profile->GetOffTheRecordProfile());
577 browser->AddSelectedTabWithURL(url, content::PAGE_TRANSITION_LINK); 604 browser->AddSelectedTabWithURL(url, content::PAGE_TRANSITION_LINK);
578 browser->window()->Show(); 605 browser->window()->Show();
579 } 606 }
580 607
581 // static 608 // static
582 TabContents* Browser::OpenApplication( 609 TabContents* Browser::OpenApplication(
583 Profile* profile, 610 Profile* profile,
584 const Extension* extension, 611 const Extension* extension,
585 extension_misc::LaunchContainer container, 612 extension_misc::LaunchContainer container,
613 const GURL& override_url,
586 WindowOpenDisposition disposition) { 614 WindowOpenDisposition disposition) {
587 #if defined(USE_AURA) 615 #if defined(USE_AURA)
588 // On aura we're experimenting with making all apps open in windows. 616 // On aura we're experimenting with making all apps open in windows.
589 container = extension_misc::LAUNCH_WINDOW; 617 container = extension_misc::LAUNCH_WINDOW;
590 #endif 618 #endif
591 TabContents* tab = NULL; 619 TabContents* tab = NULL;
592 ExtensionPrefs* prefs = profile->GetExtensionService()->extension_prefs(); 620 ExtensionPrefs* prefs = profile->GetExtensionService()->extension_prefs();
593 prefs->SetActiveBit(extension->id(), true); 621 prefs->SetActiveBit(extension->id(), true);
594 622
595 UMA_HISTOGRAM_ENUMERATION("Extensions.AppLaunchContainer", container, 100); 623 UMA_HISTOGRAM_ENUMERATION("Extensions.AppLaunchContainer", container, 100);
596 624
597 switch (container) { 625 switch (container) {
598 case extension_misc::LAUNCH_WINDOW: 626 case extension_misc::LAUNCH_WINDOW:
599 case extension_misc::LAUNCH_PANEL: 627 case extension_misc::LAUNCH_PANEL:
600 tab = Browser::OpenApplicationWindow(profile, extension, container, 628 tab = Browser::OpenApplicationWindow(profile, extension, container,
601 GURL(), NULL); 629 override_url, NULL);
602 break; 630 break;
603 case extension_misc::LAUNCH_TAB: { 631 case extension_misc::LAUNCH_TAB: {
604 tab = Browser::OpenApplicationTab(profile, extension, disposition); 632 tab = Browser::OpenApplicationTab(profile, extension, override_url,
633 disposition);
605 break; 634 break;
606 } 635 }
607 default: 636 default:
608 NOTREACHED(); 637 NOTREACHED();
609 break; 638 break;
610 } 639 }
611 return tab; 640 return tab;
612 } 641 }
613 642
614 // static 643 // static
615 TabContents* Browser::OpenApplicationWindow( 644 TabContents* Browser::OpenApplicationWindow(
616 Profile* profile, 645 Profile* profile,
617 const Extension* extension, 646 const Extension* extension,
618 extension_misc::LaunchContainer container, 647 extension_misc::LaunchContainer container,
619 const GURL& url_input, 648 const GURL& url_input,
620 Browser** app_browser) { 649 Browser** app_browser) {
621 GURL url; 650 DCHECK(!url_input.is_empty() || extension);
622 if (!url_input.is_empty()) { 651 GURL url = UrlForExtension(extension, url_input);
623 if (extension)
624 DCHECK(extension->web_extent().MatchesURL(url_input));
625 url = url_input;
626 } else {
627 DCHECK(extension); // Empty url and no extension. Nothing to open.
628 url = extension->GetFullLaunchURL();
629 }
630 652
631 std::string app_name; 653 std::string app_name;
632 if (extension) 654 app_name = extension ?
633 app_name = 655 web_app::GenerateApplicationNameFromExtensionId(extension->id()) :
634 web_app::GenerateApplicationNameFromExtensionId(extension->id()); 656 web_app::GenerateApplicationNameFromURL(url);
635 else
636 app_name = web_app::GenerateApplicationNameFromURL(url);
637 657
638 Type type = extension && (container == extension_misc::LAUNCH_PANEL) ? 658 Type type = extension && (container == extension_misc::LAUNCH_PANEL) ?
639 TYPE_PANEL : TYPE_POPUP; 659 TYPE_PANEL : TYPE_POPUP;
640 660
641 gfx::Rect window_bounds; 661 gfx::Rect window_bounds;
642 if (extension) { 662 if (extension) {
643 window_bounds.set_width(extension->launch_width()); 663 window_bounds.set_width(extension->launch_width());
644 window_bounds.set_height(extension->launch_height()); 664 window_bounds.set_height(extension->launch_height());
645 } 665 }
646 666
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 // web_app::UpdateShortcutForTabContents when it sees UPDATE_SHORTCUT as 705 // web_app::UpdateShortcutForTabContents when it sees UPDATE_SHORTCUT as
686 // pending web app action. 706 // pending web app action.
687 app_browser->pending_web_app_action_ = UPDATE_SHORTCUT; 707 app_browser->pending_web_app_action_ = UPDATE_SHORTCUT;
688 } 708 }
689 return tab; 709 return tab;
690 } 710 }
691 711
692 // static 712 // static
693 TabContents* Browser::OpenApplicationTab(Profile* profile, 713 TabContents* Browser::OpenApplicationTab(Profile* profile,
694 const Extension* extension, 714 const Extension* extension,
715 const GURL& override_url,
695 WindowOpenDisposition disposition) { 716 WindowOpenDisposition disposition) {
696 Browser* browser = BrowserList::FindTabbedBrowser(profile, false); 717 Browser* browser = BrowserList::FindTabbedBrowser(profile, false);
697 TabContents* contents = NULL; 718 TabContents* contents = NULL;
698 if (!browser) { 719 if (!browser) {
699 // No browser for this profile, need to open a new one. 720 // No browser for this profile, need to open a new one.
700 browser = Browser::Create(profile); 721 browser = Browser::Create(profile);
701 browser->window()->Show(); 722 browser->window()->Show();
702 // There's no current tab in this browser window, so add a new one. 723 // There's no current tab in this browser window, so add a new one.
703 disposition = NEW_FOREGROUND_TAB; 724 disposition = NEW_FOREGROUND_TAB;
704 } 725 }
(...skipping 13 matching lines...) Expand all
718 UMA_HISTOGRAM_ENUMERATION( 739 UMA_HISTOGRAM_ENUMERATION(
719 base::FieldTrial::MakeName("Extensions.AppTabLaunchType", 740 base::FieldTrial::MakeName("Extensions.AppTabLaunchType",
720 kDefaultAppsTrial_Name), 741 kDefaultAppsTrial_Name),
721 launch_type, 100); 742 launch_type, 100);
722 } 743 }
723 744
724 int add_type = TabStripModel::ADD_ACTIVE; 745 int add_type = TabStripModel::ADD_ACTIVE;
725 if (launch_type == ExtensionPrefs::LAUNCH_PINNED) 746 if (launch_type == ExtensionPrefs::LAUNCH_PINNED)
726 add_type |= TabStripModel::ADD_PINNED; 747 add_type |= TabStripModel::ADD_PINNED;
727 748
728 // For extensions lacking launch urls, determine a reasonable fallback. 749 GURL extension_url = UrlForExtension(extension, override_url);
729 GURL extension_url = extension->GetFullLaunchURL();
730 if (!extension_url.is_valid()) {
731 extension_url = extension->options_url();
732 if (!extension_url.is_valid())
733 extension_url = GURL(std::string(chrome::kChromeUISettingsURL) +
734 chrome::kExtensionsSubPage);
735 }
736
737 // TODO(erikkay): START_PAGE doesn't seem like the right transition in all 750 // TODO(erikkay): START_PAGE doesn't seem like the right transition in all
738 // cases. 751 // cases.
739 browser::NavigateParams params(browser, extension_url, 752 browser::NavigateParams params(browser, extension_url,
740 content::PAGE_TRANSITION_START_PAGE); 753 content::PAGE_TRANSITION_START_PAGE);
741 params.tabstrip_add_types = add_type; 754 params.tabstrip_add_types = add_type;
742 params.disposition = disposition; 755 params.disposition = disposition;
743 756
744 if (disposition == CURRENT_TAB) { 757 if (disposition == CURRENT_TAB) {
745 TabContents* existing_tab = browser->GetSelectedTabContents(); 758 TabContents* existing_tab = browser->GetSelectedTabContents();
746 TabStripModel* model = browser->tabstrip_model(); 759 TabStripModel* model = browser->tabstrip_model();
747 int tab_index = model->GetWrapperIndex(existing_tab); 760 int tab_index = model->GetWrapperIndex(existing_tab);
748 761
749 existing_tab->OpenURL(extension->GetFullLaunchURL(), existing_tab->GetURL(), 762 existing_tab->OpenURL(extension_url, existing_tab->GetURL(),
750 disposition, content::PAGE_TRANSITION_LINK); 763 disposition, content::PAGE_TRANSITION_LINK);
751 if (params.tabstrip_add_types & TabStripModel::ADD_PINNED) { 764 if (params.tabstrip_add_types & TabStripModel::ADD_PINNED) {
752 model->SetTabPinned(tab_index, true); 765 model->SetTabPinned(tab_index, true);
753 tab_index = model->GetWrapperIndex(existing_tab); 766 tab_index = model->GetWrapperIndex(existing_tab);
754 } 767 }
755 if (params.tabstrip_add_types & TabStripModel::ADD_ACTIVE) 768 if (params.tabstrip_add_types & TabStripModel::ADD_ACTIVE)
756 model->ActivateTabAt(tab_index, true); 769 model->ActivateTabAt(tab_index, true);
757 770
758 contents = existing_tab; 771 contents = existing_tab;
759 } else { 772 } else {
760 browser::Navigate(&params); 773 browser::Navigate(&params);
761 contents = params.target_contents->tab_contents(); 774 contents = params.target_contents->tab_contents();
762 } 775 }
763 776
764 // TODO(skerner): If we are already in full screen mode, and the user 777 // TODO(skerner): If we are already in full screen mode, and the user
765 // set the app to open as a regular or pinned tab, what should happen? 778 // set the app to open as a regular or pinned tab, what should happen?
766 // Today we open the tab, but stay in full screen mode. Should we leave 779 // Today we open the tab, but stay in full screen mode. Should we leave
767 // full screen mode in this case? 780 // full screen mode in this case?
768 if (launch_type == ExtensionPrefs::LAUNCH_FULLSCREEN && 781 if (launch_type == ExtensionPrefs::LAUNCH_FULLSCREEN &&
769 !browser->window()->IsFullscreen()) 782 !browser->window()->IsFullscreen()) {
770 browser->ToggleFullscreenMode(false); 783 browser->ToggleFullscreenMode(false);
784 }
771 785
772 return contents; 786 return contents;
773 } 787 }
774 788
775 // static 789 // static
776 void Browser::OpenBookmarkManagerWindow(Profile* profile) { 790 void Browser::OpenBookmarkManagerWindow(Profile* profile) {
777 Browser* browser = Browser::Create(profile); 791 Browser* browser = Browser::Create(profile);
778 browser->OpenBookmarkManager(); 792 browser->OpenBookmarkManager();
779 browser->window()->Show(); 793 browser->window()->Show();
780 } 794 }
(...skipping 4727 matching lines...) Expand 10 before | Expand all | Expand 10 after
5508 } 5522 }
5509 5523
5510 void Browser::UpdateFullscreenExitBubbleContent() { 5524 void Browser::UpdateFullscreenExitBubbleContent() {
5511 GURL url; 5525 GURL url;
5512 if (fullscreened_tab_) 5526 if (fullscreened_tab_)
5513 url = fullscreened_tab_->tab_contents()->GetURL(); 5527 url = fullscreened_tab_->tab_contents()->GetURL();
5514 5528
5515 window_->UpdateFullscreenExitBubbleContent( 5529 window_->UpdateFullscreenExitBubbleContent(
5516 url, GetFullscreenExitBubbleType()); 5530 url, GetFullscreenExitBubbleType());
5517 } 5531 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698