| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <shellapi.h> | 8 #include <shellapi.h> |
| 9 #include <windows.h> | 9 #include <windows.h> |
| 10 #endif // OS_WIN | 10 #endif // OS_WIN |
| (...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 Profile* profile, | 518 Profile* profile, |
| 519 const Extension* extension, | 519 const Extension* extension, |
| 520 extension_misc::LaunchContainer container, | 520 extension_misc::LaunchContainer container, |
| 521 TabContents* existing_tab) { | 521 TabContents* existing_tab) { |
| 522 TabContents* tab = NULL; | 522 TabContents* tab = NULL; |
| 523 | 523 |
| 524 UMA_HISTOGRAM_ENUMERATION("Extensions.AppLaunchContainer", container, 100); | 524 UMA_HISTOGRAM_ENUMERATION("Extensions.AppLaunchContainer", container, 100); |
| 525 | 525 |
| 526 switch (container) { | 526 switch (container) { |
| 527 case extension_misc::LAUNCH_WINDOW: | 527 case extension_misc::LAUNCH_WINDOW: |
| 528 tab = Browser::OpenApplicationWindow(profile, | 528 // TODO(skerner): Setting |extension| to NULL is odd. |
| 529 extension->GetFullLaunchURL()); | 529 // Not doing so triggers some vestigial extensions app window |
| 530 // behavior that leads to crashes. This sort of window is no |
| 531 // longer supported, and its remains need to be cleaned up. |
| 532 // crbug/65630 tracks this cleanup. |
| 533 tab = Browser::OpenApplicationWindow(profile, NULL, container, |
| 534 extension->GetFullLaunchURL(), |
| 535 NULL); |
| 530 break; | 536 break; |
| 531 case extension_misc::LAUNCH_PANEL: | 537 case extension_misc::LAUNCH_PANEL: |
| 532 tab = Browser::OpenApplicationWindow(profile, extension, container, | 538 tab = Browser::OpenApplicationWindow(profile, extension, container, |
| 533 GURL()); | 539 GURL(), NULL); |
| 534 break; | 540 break; |
| 535 case extension_misc::LAUNCH_TAB: { | 541 case extension_misc::LAUNCH_TAB: { |
| 536 tab = Browser::OpenApplicationTab(profile, extension, existing_tab); | 542 tab = Browser::OpenApplicationTab(profile, extension, existing_tab); |
| 537 break; | 543 break; |
| 538 } | 544 } |
| 539 default: | 545 default: |
| 540 NOTREACHED(); | 546 NOTREACHED(); |
| 541 break; | 547 break; |
| 542 } | 548 } |
| 543 return tab; | 549 return tab; |
| 544 } | 550 } |
| 545 | 551 |
| 546 // static | 552 // static |
| 547 TabContents* Browser::OpenApplicationWindow( | 553 TabContents* Browser::OpenApplicationWindow( |
| 548 Profile* profile, | 554 Profile* profile, |
| 549 const Extension* extension, | 555 const Extension* extension, |
| 550 extension_misc::LaunchContainer container, | 556 extension_misc::LaunchContainer container, |
| 551 const GURL& url_input) { | 557 const GURL& url_input, |
| 558 Browser** app_browser) { |
| 552 GURL url; | 559 GURL url; |
| 553 if (!url_input.is_empty()) { | 560 if (!url_input.is_empty()) { |
| 554 if (extension) | 561 if (extension) |
| 555 DCHECK(extension->web_extent().ContainsURL(url_input)); | 562 DCHECK(extension->web_extent().ContainsURL(url_input)); |
| 556 url = url_input; | 563 url = url_input; |
| 557 } else { | 564 } else { |
| 558 DCHECK(extension); | 565 DCHECK(extension); |
| 559 url = extension->GetFullLaunchURL(); | 566 url = extension->GetFullLaunchURL(); |
| 560 } | 567 } |
| 561 | 568 |
| 562 // TODO(erikkay) this can't be correct for extensions | 569 // TODO(erikkay) this can't be correct for extensions |
| 563 std::string app_name = web_app::GenerateApplicationNameFromURL(url); | 570 std::string app_name = web_app::GenerateApplicationNameFromURL(url); |
| 564 RegisterAppPrefs(app_name); | 571 RegisterAppPrefs(app_name); |
| 565 | 572 |
| 566 bool as_panel = extension && (container == extension_misc::LAUNCH_PANEL); | 573 bool as_panel = extension && (container == extension_misc::LAUNCH_PANEL); |
| 567 Browser* browser = Browser::CreateForApp(app_name, extension, profile, | 574 Browser* browser = Browser::CreateForApp(app_name, extension, profile, |
| 568 as_panel); | 575 as_panel); |
| 576 if (app_browser) |
| 577 *app_browser = browser; |
| 578 |
| 569 TabContentsWrapper* wrapper = | 579 TabContentsWrapper* wrapper = |
| 570 browser->AddSelectedTabWithURL(url, PageTransition::START_PAGE); | 580 browser->AddSelectedTabWithURL(url, PageTransition::START_PAGE); |
| 571 TabContents* contents = wrapper->tab_contents(); | 581 TabContents* contents = wrapper->tab_contents(); |
| 572 contents->GetMutableRendererPrefs()->can_accept_load_drops = false; | 582 contents->GetMutableRendererPrefs()->can_accept_load_drops = false; |
| 573 contents->render_view_host()->SyncRendererPrefs(); | 583 contents->render_view_host()->SyncRendererPrefs(); |
| 574 browser->window()->Show(); | 584 browser->window()->Show(); |
| 575 | 585 |
| 576 // TODO(jcampan): http://crbug.com/8123 we should not need to set the initial | 586 // TODO(jcampan): http://crbug.com/8123 we should not need to set the initial |
| 577 // focus explicitly. | 587 // focus explicitly. |
| 578 contents->view()->SetInitialFocus(); | 588 contents->view()->SetInitialFocus(); |
| 589 return contents; |
| 590 } |
| 579 | 591 |
| 580 if (!as_panel) { | 592 TabContents* Browser::OpenAppShortcutWindow(Profile* profile, |
| 593 const GURL& url, |
| 594 bool update_shortcut) { |
| 595 Browser* app_browser; |
| 596 TabContents* tab = OpenApplicationWindow( |
| 597 profile, |
| 598 NULL, // this is a URL app. No extension. |
| 599 extension_misc::LAUNCH_WINDOW, |
| 600 url, |
| 601 &app_browser); |
| 602 |
| 603 if (!tab) |
| 604 return NULL; |
| 605 |
| 606 if (update_shortcut) { |
| 581 // Set UPDATE_SHORTCUT as the pending web app action. This action is picked | 607 // Set UPDATE_SHORTCUT as the pending web app action. This action is picked |
| 582 // up in LoadingStateChanged to schedule a GetApplicationInfo. And when | 608 // up in LoadingStateChanged to schedule a GetApplicationInfo. And when |
| 583 // the web app info is available, TabContents notifies Browser via | 609 // the web app info is available, TabContents notifies Browser via |
| 584 // OnDidGetApplicationInfo, which calls | 610 // OnDidGetApplicationInfo, which calls |
| 585 // web_app::UpdateShortcutForTabContents when it sees UPDATE_SHORTCUT as | 611 // web_app::UpdateShortcutForTabContents when it sees UPDATE_SHORTCUT as |
| 586 // pending web app action. | 612 // pending web app action. |
| 587 browser->pending_web_app_action_ = UPDATE_SHORTCUT; | 613 app_browser->pending_web_app_action_ = UPDATE_SHORTCUT; |
| 588 } | 614 } |
| 589 | 615 return tab; |
| 590 return contents; | |
| 591 } | 616 } |
| 592 | 617 |
| 593 // static | 618 // static |
| 594 TabContents* Browser::OpenApplicationWindow(Profile* profile, const GURL& url) { | |
| 595 return OpenApplicationWindow(profile, NULL, extension_misc::LAUNCH_WINDOW, | |
| 596 url); | |
| 597 } | |
| 598 | |
| 599 // static | |
| 600 TabContents* Browser::OpenApplicationTab(Profile* profile, | 619 TabContents* Browser::OpenApplicationTab(Profile* profile, |
| 601 const Extension* extension, | 620 const Extension* extension, |
| 602 TabContents* existing_tab) { | 621 TabContents* existing_tab) { |
| 603 Browser* browser = BrowserList::GetLastActiveWithProfile(profile); | 622 Browser* browser = BrowserList::GetLastActiveWithProfile(profile); |
| 604 TabContents* contents = NULL; | 623 TabContents* contents = NULL; |
| 605 if (!browser || browser->type() != Browser::TYPE_NORMAL) | 624 if (!browser || browser->type() != Browser::TYPE_NORMAL) |
| 606 return contents; | 625 return contents; |
| 607 | 626 |
| 608 // Check the prefs for overridden mode. | 627 // Check the prefs for overridden mode. |
| 609 ExtensionsService* extensions_service = profile->GetExtensionsService(); | 628 ExtensionsService* extensions_service = profile->GetExtensionsService(); |
| (...skipping 3532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4142 NOTREACHED(); | 4161 NOTREACHED(); |
| 4143 return false; | 4162 return false; |
| 4144 } | 4163 } |
| 4145 | 4164 |
| 4146 void Browser::CreateInstantIfNecessary() { | 4165 void Browser::CreateInstantIfNecessary() { |
| 4147 if (type() == TYPE_NORMAL && InstantController::IsEnabled(profile()) && | 4166 if (type() == TYPE_NORMAL && InstantController::IsEnabled(profile()) && |
| 4148 !profile()->IsOffTheRecord()) { | 4167 !profile()->IsOffTheRecord()) { |
| 4149 instant_.reset(new InstantController(profile_, this)); | 4168 instant_.reset(new InstantController(profile_, this)); |
| 4150 } | 4169 } |
| 4151 } | 4170 } |
| OLD | NEW |