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

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

Issue 9730021: Remove experimental sync promo layouts (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: a Created 8 years, 9 months 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) 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/browser_init.h" 5 #include "chrome/browser/ui/browser_init.h"
6 6
7 #include <algorithm> // For max(). 7 #include <algorithm> // For max().
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 #include "chrome/browser/search_engines/template_url_service.h" 58 #include "chrome/browser/search_engines/template_url_service.h"
59 #include "chrome/browser/search_engines/template_url_service_factory.h" 59 #include "chrome/browser/search_engines/template_url_service_factory.h"
60 #include "chrome/browser/sessions/session_restore.h" 60 #include "chrome/browser/sessions/session_restore.h"
61 #include "chrome/browser/sessions/session_service.h" 61 #include "chrome/browser/sessions/session_service.h"
62 #include "chrome/browser/sessions/session_service_factory.h" 62 #include "chrome/browser/sessions/session_service_factory.h"
63 #include "chrome/browser/shell_integration.h" 63 #include "chrome/browser/shell_integration.h"
64 #include "chrome/browser/tab_contents/link_infobar_delegate.h" 64 #include "chrome/browser/tab_contents/link_infobar_delegate.h"
65 #include "chrome/browser/tab_contents/simple_alert_infobar_delegate.h" 65 #include "chrome/browser/tab_contents/simple_alert_infobar_delegate.h"
66 #include "chrome/browser/tabs/pinned_tab_codec.h" 66 #include "chrome/browser/tabs/pinned_tab_codec.h"
67 #include "chrome/browser/tabs/tab_strip_model.h" 67 #include "chrome/browser/tabs/tab_strip_model.h"
68 #include "chrome/browser/ui/browser_dialogs.h"
69 #include "chrome/browser/ui/browser_list.h" 68 #include "chrome/browser/ui/browser_list.h"
70 #include "chrome/browser/ui/browser_navigator.h" 69 #include "chrome/browser/ui/browser_navigator.h"
71 #include "chrome/browser/ui/browser_window.h" 70 #include "chrome/browser/ui/browser_window.h"
72 #include "chrome/browser/ui/dialog_style.h"
73 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 71 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
74 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h" 72 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h"
75 #include "chrome/browser/ui/webui/sync_promo/sync_promo_dialog.h"
76 #include "chrome/browser/ui/webui/sync_promo/sync_promo_trial.h" 73 #include "chrome/browser/ui/webui/sync_promo/sync_promo_trial.h"
77 #include "chrome/browser/ui/webui/sync_promo/sync_promo_ui.h" 74 #include "chrome/browser/ui/webui/sync_promo/sync_promo_ui.h"
78 #include "chrome/common/chrome_constants.h" 75 #include "chrome/common/chrome_constants.h"
79 #include "chrome/common/chrome_notification_types.h" 76 #include "chrome/common/chrome_notification_types.h"
80 #include "chrome/common/chrome_paths.h" 77 #include "chrome/common/chrome_paths.h"
81 #include "chrome/common/chrome_result_codes.h" 78 #include "chrome/common/chrome_result_codes.h"
82 #include "chrome/common/chrome_switches.h" 79 #include "chrome/common/chrome_switches.h"
83 #include "chrome/common/chrome_version_info.h" 80 #include "chrome/common/chrome_version_info.h"
84 #include "chrome/common/extensions/extension_constants.h" 81 #include "chrome/common/extensions/extension_constants.h"
85 #include "chrome/common/pref_names.h" 82 #include "chrome/common/pref_names.h"
(...skipping 1132 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 bool process_startup, 1215 bool process_startup,
1219 const std::vector<GURL>& urls) { 1216 const std::vector<GURL>& urls) {
1220 std::vector<Tab> tabs; 1217 std::vector<Tab> tabs;
1221 UrlsToTabs(urls, &tabs); 1218 UrlsToTabs(urls, &tabs);
1222 return OpenTabsInBrowser(browser, process_startup, tabs); 1219 return OpenTabsInBrowser(browser, process_startup, tabs);
1223 } 1220 }
1224 1221
1225 Browser* BrowserInit::LaunchWithProfile::OpenTabsInBrowser( 1222 Browser* BrowserInit::LaunchWithProfile::OpenTabsInBrowser(
1226 Browser* browser, 1223 Browser* browser,
1227 bool process_startup, 1224 bool process_startup,
1228 const std::vector<Tab>& in_tabs) { 1225 const std::vector<Tab>& tabs) {
1229 DCHECK(!in_tabs.empty()); 1226 DCHECK(!tabs.empty());
1230 1227
1231 // If we don't yet have a profile, try to use the one we're given from 1228 // If we don't yet have a profile, try to use the one we're given from
1232 // |browser|. While we may not end up actually using |browser| (since it 1229 // |browser|. While we may not end up actually using |browser| (since it
1233 // could be a popup window), we can at least use the profile. 1230 // could be a popup window), we can at least use the profile.
1234 if (!profile_ && browser) 1231 if (!profile_ && browser)
1235 profile_ = browser->profile(); 1232 profile_ = browser->profile();
1236 1233
1237 std::vector<Tab> tabs(in_tabs);
1238 size_t active_tab_index =
1239 ShowSyncPromoDialog(process_startup, &browser, &tabs);
1240 bool first_tab = active_tab_index == std::string::npos;
1241
1242 if (!browser || !browser->is_type_tabbed()) { 1234 if (!browser || !browser->is_type_tabbed()) {
1243 browser = Browser::Create(profile_); 1235 browser = Browser::Create(profile_);
1244 } else { 1236 } else {
1245 #if defined(TOOLKIT_GTK) 1237 #if defined(TOOLKIT_GTK)
1246 // Setting the time of the last action on the window here allows us to steal 1238 // Setting the time of the last action on the window here allows us to steal
1247 // focus, which is what the user wants when opening a new tab in an existing 1239 // focus, which is what the user wants when opening a new tab in an existing
1248 // browser window. 1240 // browser window.
1249 gtk_util::SetWMLastUserActionTime(browser->window()->GetNativeHandle()); 1241 gtk_util::SetWMLastUserActionTime(browser->window()->GetNativeHandle());
1250 #endif 1242 #endif
1251 } 1243 }
1252 1244
1253 #if !defined(OS_MACOSX) 1245 #if !defined(OS_MACOSX)
1254 // In kiosk mode, we want to always be fullscreen, so switch to that now. 1246 // In kiosk mode, we want to always be fullscreen, so switch to that now.
1255 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode)) 1247 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode))
1256 browser->ToggleFullscreenMode(); 1248 browser->ToggleFullscreenMode();
1257 #endif 1249 #endif
1258 1250
1251 bool first_tab = true;
1259 for (size_t i = 0; i < tabs.size(); ++i) { 1252 for (size_t i = 0; i < tabs.size(); ++i) {
1260 // We skip URLs that we'd have to launch an external protocol handler for. 1253 // We skip URLs that we'd have to launch an external protocol handler for.
1261 // This avoids us getting into an infinite loop asking ourselves to open 1254 // This avoids us getting into an infinite loop asking ourselves to open
1262 // a URL, should the handler be (incorrectly) configured to be us. Anyone 1255 // a URL, should the handler be (incorrectly) configured to be us. Anyone
1263 // asking us to open such a URL should really ask the handler directly. 1256 // asking us to open such a URL should really ask the handler directly.
1264 bool handled_by_chrome = ProfileIOData::IsHandledURL(tabs[i].url) || 1257 bool handled_by_chrome = ProfileIOData::IsHandledURL(tabs[i].url) ||
1265 (profile_ && profile_->GetProtocolHandlerRegistry()->IsHandledProtocol( 1258 (profile_ && profile_->GetProtocolHandlerRegistry()->IsHandledProtocol(
1266 tabs[i].url.scheme())); 1259 tabs[i].url.scheme()));
1267 if (!process_startup && !handled_by_chrome) 1260 if (!process_startup && !handled_by_chrome)
1268 continue; 1261 continue;
1269 1262
1270 size_t index; 1263 int add_types = first_tab ? TabStripModel::ADD_ACTIVE :
1271 if (tabs[i].url.SchemeIs(chrome::kChromeUIScheme) && 1264 TabStripModel::ADD_NONE;
1272 tabs[i].url.host() == chrome::kChromeUISyncPromoHost) {
1273 // The sync promo must always be the first tab. If the browser window
1274 // was spawned from the sync promo dialog then it might have other tabs
1275 // in it already. Explicilty set it to 0 to ensure that it's first.
1276 index = 0;
1277 } else {
1278 index = browser->GetIndexForInsertionDuringRestore(i);
1279 }
1280
1281 int add_types = (first_tab || index == active_tab_index) ?
1282 TabStripModel::ADD_ACTIVE : TabStripModel::ADD_NONE;
1283 add_types |= TabStripModel::ADD_FORCE_INDEX; 1265 add_types |= TabStripModel::ADD_FORCE_INDEX;
1284 if (tabs[i].is_pinned) 1266 if (tabs[i].is_pinned)
1285 add_types |= TabStripModel::ADD_PINNED; 1267 add_types |= TabStripModel::ADD_PINNED;
1268 int index = browser->GetIndexForInsertionDuringRestore(i);
1286 1269
1287 browser::NavigateParams params(browser, tabs[i].url, 1270 browser::NavigateParams params(browser, tabs[i].url,
1288 content::PAGE_TRANSITION_START_PAGE); 1271 content::PAGE_TRANSITION_START_PAGE);
1289 params.disposition = (first_tab || index == active_tab_index) ? 1272 params.disposition = first_tab ? NEW_FOREGROUND_TAB :
1290 NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB; 1273 NEW_BACKGROUND_TAB;
1291 params.tabstrip_index = index; 1274 params.tabstrip_index = index;
1292 params.tabstrip_add_types = add_types; 1275 params.tabstrip_add_types = add_types;
1293 params.extension_app_id = tabs[i].app_id; 1276 params.extension_app_id = tabs[i].app_id;
1294 browser::Navigate(&params); 1277 browser::Navigate(&params);
1295 1278
1296 first_tab = false; 1279 first_tab = false;
1297 } 1280 }
1298 if (!browser->GetSelectedWebContents()) { 1281 if (!browser->GetSelectedWebContents()) {
1299 // TODO: this is a work around for 110909. Figure out why it's needed. 1282 // TODO: this is a work around for 110909. Figure out why it's needed.
1300 if (!browser->tab_count()) 1283 if (!browser->tab_count())
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
1488 if (prefs->FindPreference(prefs::kShouldShowWelcomePage) && 1471 if (prefs->FindPreference(prefs::kShouldShowWelcomePage) &&
1489 prefs->GetBoolean(prefs::kShouldShowWelcomePage)) { 1472 prefs->GetBoolean(prefs::kShouldShowWelcomePage)) {
1490 // Reset the preference so we don't show the welcome page next time. 1473 // Reset the preference so we don't show the welcome page next time.
1491 prefs->ClearPref(prefs::kShouldShowWelcomePage); 1474 prefs->ClearPref(prefs::kShouldShowWelcomePage);
1492 startup_urls->push_back(GetWelcomePageURL()); 1475 startup_urls->push_back(GetWelcomePageURL());
1493 } 1476 }
1494 } 1477 }
1495 1478
1496 // If the sync promo page is going to be displayed then insert it at the front 1479 // If the sync promo page is going to be displayed then insert it at the front
1497 // of the list. 1480 // of the list.
1498 bool promo_suppressed = false; 1481 if (SyncPromoUI::ShouldShowSyncPromoAtStartup(profile_, is_first_run_)) {
1499 if (SyncPromoUI::ShouldShowSyncPromoAtStartup(profile_, is_first_run_,
1500 &promo_suppressed)) {
1501 SyncPromoUI::DidShowSyncPromoAtStartup(profile_); 1482 SyncPromoUI::DidShowSyncPromoAtStartup(profile_);
1502 GURL old_url = (*startup_urls)[0]; 1483 GURL old_url = (*startup_urls)[0];
1503 (*startup_urls)[0] = 1484 (*startup_urls)[0] =
1504 SyncPromoUI::GetSyncPromoURL(GURL(chrome::kChromeUINewTabURL), true, 1485 SyncPromoUI::GetSyncPromoURL(GURL(chrome::kChromeUINewTabURL), true,
1505 std::string()); 1486 std::string());
1506 1487
1507 // An empty URL means to go to the home page. 1488 // An empty URL means to go to the home page.
1508 if (old_url.is_empty() && 1489 if (old_url.is_empty() &&
1509 profile_->GetHomePage() == GURL(chrome::kChromeUINewTabURL)) { 1490 profile_->GetHomePage() == GURL(chrome::kChromeUINewTabURL)) {
1510 old_url = GURL(chrome::kChromeUINewTabURL); 1491 old_url = GURL(chrome::kChromeUINewTabURL);
1511 } 1492 }
1512 1493
1513 // If the old URL is not the NTP then insert it right after the sync promo. 1494 // If the old URL is not the NTP then insert it right after the sync promo.
1514 if (old_url != GURL(chrome::kChromeUINewTabURL)) 1495 if (old_url != GURL(chrome::kChromeUINewTabURL))
1515 startup_urls->insert(startup_urls->begin() + 1, old_url); 1496 startup_urls->insert(startup_urls->begin() + 1, old_url);
1516 1497
1517 // If we have more than two startup tabs then skip the welcome page. 1498 // If we have more than two startup tabs then skip the welcome page.
1518 if (startup_urls->size() > 2) { 1499 if (startup_urls->size() > 2) {
1519 std::vector<GURL>::iterator it = std::find( 1500 std::vector<GURL>::iterator it = std::find(
1520 startup_urls->begin(), startup_urls->end(), GetWelcomePageURL()); 1501 startup_urls->begin(), startup_urls->end(), GetWelcomePageURL());
1521 if (it != startup_urls->end()) 1502 if (it != startup_urls->end())
1522 startup_urls->erase(it); 1503 startup_urls->erase(it);
1523 } 1504 }
1524 } else if (promo_suppressed) {
1525 sync_promo_trial::RecordSyncPromoSuppressedForCurrentTrial();
1526 } 1505 }
1527 } 1506 }
1528 1507
1529 void BrowserInit::LaunchWithProfile::CheckDefaultBrowser(Profile* profile) { 1508 void BrowserInit::LaunchWithProfile::CheckDefaultBrowser(Profile* profile) {
1530 // We do not check if we are the default browser if: 1509 // We do not check if we are the default browser if:
1531 // - the user said "don't ask me again" on the infobar earlier. 1510 // - the user said "don't ask me again" on the infobar earlier.
1532 // - this is the first launch after the first run flow. 1511 // - this is the first launch after the first run flow.
1533 // - There is a policy in control of this setting. 1512 // - There is a policy in control of this setting.
1534 if (!profile->GetPrefs()->GetBoolean(prefs::kCheckDefaultBrowser) || 1513 if (!profile->GetPrefs()->GetBoolean(prefs::kCheckDefaultBrowser) ||
1535 is_first_run_) { 1514 is_first_run_) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1576 if (command_line.HasSwitch(switches::kAutoLaunchAtStartup) || 1555 if (command_line.HasSwitch(switches::kAutoLaunchAtStartup) ||
1577 first_run::IsChromeFirstRun()) { 1556 first_run::IsChromeFirstRun()) {
1578 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 1557 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
1579 base::Bind(&CheckAutoLaunchCallback)); 1558 base::Bind(&CheckAutoLaunchCallback));
1580 return true; 1559 return true;
1581 } 1560 }
1582 #endif 1561 #endif
1583 return false; 1562 return false;
1584 } 1563 }
1585 1564
1586 size_t BrowserInit::LaunchWithProfile::ShowSyncPromoDialog(
1587 bool process_startup,
1588 Browser** browser,
1589 std::vector<Tab>* tabs) {
1590 DCHECK(browser);
1591 DCHECK(tabs);
1592
1593 // The dialog is only shown on process startup if no browser window is already
1594 // being displayed.
1595 if (!profile_ || profile_->IsOffTheRecord() || *browser || !process_startup ||
1596 SyncPromoUI::GetSyncPromoVersion() != SyncPromoUI::VERSION_DIALOG) {
1597 return std::string::npos;
1598 }
1599
1600 for (size_t i = 0; i < tabs->size(); ++i) {
1601 GURL url((*tabs)[i].url);
1602 if (url.SchemeIs(chrome::kChromeUIScheme) &&
1603 url.host() == chrome::kChromeUISyncPromoHost) {
1604 SyncPromoDialog dialog(profile_, url);
1605 dialog.ShowDialog();
1606 *browser = dialog.spawned_browser();
1607 if (!*browser) {
1608 // If no browser window was spawned then just replace the sync promo
1609 // with the next URL.
1610 (*tabs)[i].url = SyncPromoUI::GetNextPageURLForSyncPromoURL(url);
1611 return i;
1612 } else if (dialog.sync_promo_was_closed()) {
1613 tabs->erase(tabs->begin() + i);
1614 // The tab spawned by the dialog is at tab index 0 so return 0 to make
1615 // it the active tab.
1616 return 0;
1617 } else {
1618 // Since the sync promo is not closed it will be inserted at tab
1619 // index 0. The tab spawned by the dialog will be at index 1 so return
1620 // 0 to make it the active tab.
1621 return 1;
1622 }
1623 }
1624 }
1625
1626 return std::string::npos;
1627 }
1628
1629 std::vector<GURL> BrowserInit::GetURLsFromCommandLine( 1565 std::vector<GURL> BrowserInit::GetURLsFromCommandLine(
1630 const CommandLine& command_line, 1566 const CommandLine& command_line,
1631 const FilePath& cur_dir, 1567 const FilePath& cur_dir,
1632 Profile* profile) { 1568 Profile* profile) {
1633 std::vector<GURL> urls; 1569 std::vector<GURL> urls;
1634 const CommandLine::StringVector& params = command_line.GetArgs(); 1570 const CommandLine::StringVector& params = command_line.GetArgs();
1635 1571
1636 for (size_t i = 0; i < params.size(); ++i) { 1572 for (size_t i = 0; i < params.size(); ++i) {
1637 FilePath param = FilePath(params[i]); 1573 FilePath param = FilePath(params[i]);
1638 // Handle Vista way of searching - "? <search-term>" 1574 // Handle Vista way of searching - "? <search-term>"
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
1947 1883
1948 Profile* profile = ProfileManager::GetLastUsedProfile(); 1884 Profile* profile = ProfileManager::GetLastUsedProfile();
1949 if (!profile) { 1885 if (!profile) {
1950 // We should only be able to get here if the profile already exists and 1886 // We should only be able to get here if the profile already exists and
1951 // has been created. 1887 // has been created.
1952 NOTREACHED(); 1888 NOTREACHED();
1953 return; 1889 return;
1954 } 1890 }
1955 ProcessCmdLineImpl(cmd_line, cur_dir, false, profile, Profiles(), NULL, NULL); 1891 ProcessCmdLineImpl(cmd_line, cur_dir, false, profile, Profiles(), NULL, NULL);
1956 } 1892 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698