OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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_commands.h" | 5 #include "chrome/browser/ui/browser_commands.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 if (disposition == NEW_BACKGROUND_TAB) | 191 if (disposition == NEW_BACKGROUND_TAB) |
192 new_tab->WasHidden(); | 192 new_tab->WasHidden(); |
193 browser->tab_strip_model()->AddWebContents( | 193 browser->tab_strip_model()->AddWebContents( |
194 new_tab, -1, ui::PAGE_TRANSITION_LINK, | 194 new_tab, -1, ui::PAGE_TRANSITION_LINK, |
195 (disposition == NEW_FOREGROUND_TAB) ? | 195 (disposition == NEW_FOREGROUND_TAB) ? |
196 TabStripModel::ADD_ACTIVE : TabStripModel::ADD_NONE); | 196 TabStripModel::ADD_ACTIVE : TabStripModel::ADD_NONE); |
197 return new_tab; | 197 return new_tab; |
198 } | 198 } |
199 case NEW_WINDOW: { | 199 case NEW_WINDOW: { |
200 WebContents* new_tab = current_tab->Clone(); | 200 WebContents* new_tab = current_tab->Clone(); |
201 Browser* new_browser = new Browser(Browser::CreateParams( | 201 Browser* new_browser = |
202 browser->profile(), browser->host_desktop_type())); | 202 new Browser(Browser::CreateParams(browser->profile())); |
203 new_browser->tab_strip_model()->AddWebContents( | 203 new_browser->tab_strip_model()->AddWebContents( |
204 new_tab, -1, ui::PAGE_TRANSITION_LINK, | 204 new_tab, -1, ui::PAGE_TRANSITION_LINK, |
205 TabStripModel::ADD_ACTIVE); | 205 TabStripModel::ADD_ACTIVE); |
206 new_browser->window()->Show(); | 206 new_browser->window()->Show(); |
207 return new_tab; | 207 return new_tab; |
208 } | 208 } |
209 default: | 209 default: |
210 browser->window()->GetLocationBar()->Revert(); | 210 browser->window()->GetLocationBar()->Revert(); |
211 return current_tab; | 211 return current_tab; |
212 } | 212 } |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 if (!content::IsSavableURL( | 319 if (!content::IsSavableURL( |
320 last_committed_entry ? last_committed_entry->GetURL() : GURL()) || | 320 last_committed_entry ? last_committed_entry->GetURL() : GURL()) || |
321 current_tab->ShowingInterstitialPage()) | 321 current_tab->ShowingInterstitialPage()) |
322 content_restrictions |= CONTENT_RESTRICTION_SAVE; | 322 content_restrictions |= CONTENT_RESTRICTION_SAVE; |
323 if (current_tab->ShowingInterstitialPage()) | 323 if (current_tab->ShowingInterstitialPage()) |
324 content_restrictions |= CONTENT_RESTRICTION_PRINT; | 324 content_restrictions |= CONTENT_RESTRICTION_PRINT; |
325 } | 325 } |
326 return content_restrictions; | 326 return content_restrictions; |
327 } | 327 } |
328 | 328 |
329 void NewEmptyWindow(Profile* profile, HostDesktopType desktop_type) { | 329 void NewEmptyWindow(Profile* profile) { |
330 bool incognito = profile->IsOffTheRecord(); | 330 bool incognito = profile->IsOffTheRecord(); |
331 PrefService* prefs = profile->GetPrefs(); | 331 PrefService* prefs = profile->GetPrefs(); |
332 if (incognito) { | 332 if (incognito) { |
333 if (IncognitoModePrefs::GetAvailability(prefs) == | 333 if (IncognitoModePrefs::GetAvailability(prefs) == |
334 IncognitoModePrefs::DISABLED) { | 334 IncognitoModePrefs::DISABLED) { |
335 incognito = false; | 335 incognito = false; |
336 } | 336 } |
337 } else if (profile->IsGuestSession() || | 337 } else if (profile->IsGuestSession() || |
338 (browser_defaults::kAlwaysOpenIncognitoWindow && | 338 (browser_defaults::kAlwaysOpenIncognitoWindow && |
339 IncognitoModePrefs::ShouldLaunchIncognito( | 339 IncognitoModePrefs::ShouldLaunchIncognito( |
340 *base::CommandLine::ForCurrentProcess(), prefs))) { | 340 *base::CommandLine::ForCurrentProcess(), prefs))) { |
341 incognito = true; | 341 incognito = true; |
342 } | 342 } |
343 | 343 |
344 if (incognito) { | 344 if (incognito) { |
345 content::RecordAction(UserMetricsAction("NewIncognitoWindow")); | 345 content::RecordAction(UserMetricsAction("NewIncognitoWindow")); |
346 OpenEmptyWindow(profile->GetOffTheRecordProfile(), desktop_type); | 346 OpenEmptyWindow(profile->GetOffTheRecordProfile()); |
347 } else { | 347 } else { |
348 content::RecordAction(UserMetricsAction("NewWindow")); | 348 content::RecordAction(UserMetricsAction("NewWindow")); |
349 SessionService* session_service = | 349 SessionService* session_service = |
350 SessionServiceFactory::GetForProfileForSessionRestore( | 350 SessionServiceFactory::GetForProfileForSessionRestore( |
351 profile->GetOriginalProfile()); | 351 profile->GetOriginalProfile()); |
352 if (!session_service || | 352 if (!session_service || |
353 !session_service->RestoreIfNecessary(std::vector<GURL>())) { | 353 !session_service->RestoreIfNecessary(std::vector<GURL>())) { |
354 OpenEmptyWindow(profile->GetOriginalProfile(), desktop_type); | 354 OpenEmptyWindow(profile->GetOriginalProfile()); |
355 } | 355 } |
356 } | 356 } |
357 } | 357 } |
358 | 358 |
359 Browser* OpenEmptyWindow(Profile* profile, HostDesktopType desktop_type) { | 359 Browser* OpenEmptyWindow(Profile* profile) { |
360 Browser* browser = new Browser( | 360 Browser* browser = |
361 Browser::CreateParams(Browser::TYPE_TABBED, profile, desktop_type)); | 361 new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile)); |
362 AddTabAt(browser, GURL(), -1, true); | 362 AddTabAt(browser, GURL(), -1, true); |
363 browser->window()->Show(); | 363 browser->window()->Show(); |
364 return browser; | 364 return browser; |
365 } | 365 } |
366 | 366 |
367 void OpenWindowWithRestoredTabs(Profile* profile, | 367 void OpenWindowWithRestoredTabs(Profile* profile, |
368 HostDesktopType host_desktop_type) { | 368 HostDesktopType host_desktop_type) { |
369 sessions::TabRestoreService* service = | 369 sessions::TabRestoreService* service = |
370 TabRestoreServiceFactory::GetForProfile(profile); | 370 TabRestoreServiceFactory::GetForProfile(profile); |
371 if (service) | 371 if (service) |
372 service->RestoreMostRecentEntry(NULL, host_desktop_type); | 372 service->RestoreMostRecentEntry(NULL, host_desktop_type); |
373 } | 373 } |
374 | 374 |
375 void OpenURLOffTheRecord(Profile* profile, | 375 void OpenURLOffTheRecord(Profile* profile, |
376 const GURL& url, | 376 const GURL& url) { |
377 chrome::HostDesktopType desktop_type) { | 377 ScopedTabbedBrowserDisplayer displayer(profile->GetOffTheRecordProfile()); |
378 ScopedTabbedBrowserDisplayer displayer(profile->GetOffTheRecordProfile(), | |
379 desktop_type); | |
380 AddSelectedTabWithURL(displayer.browser(), url, | 378 AddSelectedTabWithURL(displayer.browser(), url, |
381 ui::PAGE_TRANSITION_LINK); | 379 ui::PAGE_TRANSITION_LINK); |
382 } | 380 } |
383 | 381 |
384 bool CanGoBack(const Browser* browser) { | 382 bool CanGoBack(const Browser* browser) { |
385 return browser->tab_strip_model()->GetActiveWebContents()-> | 383 return browser->tab_strip_model()->GetActiveWebContents()-> |
386 GetController().CanGoBack(); | 384 GetController().CanGoBack(); |
387 } | 385 } |
388 | 386 |
389 void GoBack(Browser* browser, WindowOpenDisposition disposition) { | 387 void GoBack(Browser* browser, WindowOpenDisposition disposition) { |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 } | 528 } |
531 #endif | 529 #endif |
532 } | 530 } |
533 | 531 |
534 void Stop(Browser* browser) { | 532 void Stop(Browser* browser) { |
535 content::RecordAction(UserMetricsAction("Stop")); | 533 content::RecordAction(UserMetricsAction("Stop")); |
536 browser->tab_strip_model()->GetActiveWebContents()->Stop(); | 534 browser->tab_strip_model()->GetActiveWebContents()->Stop(); |
537 } | 535 } |
538 | 536 |
539 void NewWindow(Browser* browser) { | 537 void NewWindow(Browser* browser) { |
540 NewEmptyWindow(browser->profile()->GetOriginalProfile(), | 538 NewEmptyWindow(browser->profile()->GetOriginalProfile()); |
541 browser->host_desktop_type()); | |
542 } | 539 } |
543 | 540 |
544 void NewIncognitoWindow(Browser* browser) { | 541 void NewIncognitoWindow(Browser* browser) { |
545 NewEmptyWindow(browser->profile()->GetOffTheRecordProfile(), | 542 NewEmptyWindow(browser->profile()->GetOffTheRecordProfile()); |
546 browser->host_desktop_type()); | |
547 } | 543 } |
548 | 544 |
549 void CloseWindow(Browser* browser) { | 545 void CloseWindow(Browser* browser) { |
550 content::RecordAction(UserMetricsAction("CloseWindow")); | 546 content::RecordAction(UserMetricsAction("CloseWindow")); |
551 browser->window()->Close(); | 547 browser->window()->Close(); |
552 } | 548 } |
553 | 549 |
554 void NewTab(Browser* browser) { | 550 void NewTab(Browser* browser) { |
555 content::RecordAction(UserMetricsAction("NewTab")); | 551 content::RecordAction(UserMetricsAction("NewTab")); |
556 // TODO(asvitkine): This is invoked programmatically from several places. | 552 // TODO(asvitkine): This is invoked programmatically from several places. |
557 // Audit the code and change it so that the histogram only gets collected for | 553 // Audit the code and change it so that the histogram only gets collected for |
558 // user-initiated commands. | 554 // user-initiated commands. |
559 UMA_HISTOGRAM_ENUMERATION("Tab.NewTab", TabStripModel::NEW_TAB_COMMAND, | 555 UMA_HISTOGRAM_ENUMERATION("Tab.NewTab", TabStripModel::NEW_TAB_COMMAND, |
560 TabStripModel::NEW_TAB_ENUM_COUNT); | 556 TabStripModel::NEW_TAB_ENUM_COUNT); |
561 | 557 |
562 if (browser->is_type_tabbed()) { | 558 if (browser->is_type_tabbed()) { |
563 AddTabAt(browser, GURL(), -1, true); | 559 AddTabAt(browser, GURL(), -1, true); |
564 browser->tab_strip_model()->GetActiveWebContents()->RestoreFocus(); | 560 browser->tab_strip_model()->GetActiveWebContents()->RestoreFocus(); |
565 } else { | 561 } else { |
566 ScopedTabbedBrowserDisplayer displayer(browser->profile(), | 562 ScopedTabbedBrowserDisplayer displayer(browser->profile()); |
567 browser->host_desktop_type()); | |
568 Browser* b = displayer.browser(); | 563 Browser* b = displayer.browser(); |
569 AddTabAt(b, GURL(), -1, true); | 564 AddTabAt(b, GURL(), -1, true); |
570 b->window()->Show(); | 565 b->window()->Show(); |
571 // The call to AddBlankTabAt above did not set the focus to the tab as its | 566 // The call to AddBlankTabAt above did not set the focus to the tab as its |
572 // window was not active, so we have to do it explicitly. | 567 // window was not active, so we have to do it explicitly. |
573 // See http://crbug.com/6380. | 568 // See http://crbug.com/6380. |
574 b->tab_strip_model()->GetActiveWebContents()->RestoreFocus(); | 569 b->tab_strip_model()->GetActiveWebContents()->RestoreFocus(); |
575 } | 570 } |
576 } | 571 } |
577 | 572 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 int index = browser->tab_strip_model()->GetIndexOfWebContents(contents); | 659 int index = browser->tab_strip_model()->GetIndexOfWebContents(contents); |
665 pinned = browser->tab_strip_model()->IsTabPinned(index); | 660 pinned = browser->tab_strip_model()->IsTabPinned(index); |
666 int add_types = TabStripModel::ADD_ACTIVE | | 661 int add_types = TabStripModel::ADD_ACTIVE | |
667 TabStripModel::ADD_INHERIT_GROUP | | 662 TabStripModel::ADD_INHERIT_GROUP | |
668 (pinned ? TabStripModel::ADD_PINNED : 0); | 663 (pinned ? TabStripModel::ADD_PINNED : 0); |
669 browser->tab_strip_model()->InsertWebContentsAt( | 664 browser->tab_strip_model()->InsertWebContentsAt( |
670 index + 1, contents_dupe, add_types); | 665 index + 1, contents_dupe, add_types); |
671 } else { | 666 } else { |
672 Browser* new_browser = NULL; | 667 Browser* new_browser = NULL; |
673 if (browser->is_app() && !browser->is_type_popup()) { | 668 if (browser->is_app() && !browser->is_type_popup()) { |
674 new_browser = new Browser( | 669 new_browser = new Browser(Browser::CreateParams::CreateForApp( |
675 Browser::CreateParams::CreateForApp(browser->app_name(), | 670 browser->app_name(), browser->is_trusted_source(), gfx::Rect(), |
676 browser->is_trusted_source(), | 671 browser->profile())); |
677 gfx::Rect(), | |
678 browser->profile(), | |
679 browser->host_desktop_type())); | |
680 } else { | 672 } else { |
681 new_browser = new Browser( | 673 new_browser = new Browser( |
682 Browser::CreateParams(browser->type(), browser->profile(), | 674 Browser::CreateParams(browser->type(), browser->profile())); |
683 browser->host_desktop_type())); | |
684 } | 675 } |
685 // Preserve the size of the original window. The new window has already | 676 // Preserve the size of the original window. The new window has already |
686 // been given an offset by the OS, so we shouldn't copy the old bounds. | 677 // been given an offset by the OS, so we shouldn't copy the old bounds. |
687 BrowserWindow* new_window = new_browser->window(); | 678 BrowserWindow* new_window = new_browser->window(); |
688 new_window->SetBounds(gfx::Rect(new_window->GetRestoredBounds().origin(), | 679 new_window->SetBounds(gfx::Rect(new_window->GetRestoredBounds().origin(), |
689 browser->window()->GetRestoredBounds().size())); | 680 browser->window()->GetRestoredBounds().size())); |
690 | 681 |
691 // We need to show the browser now. Otherwise ContainerWin assumes the | 682 // We need to show the browser now. Otherwise ContainerWin assumes the |
692 // WebContents is invisible and won't size it. | 683 // WebContents is invisible and won't size it. |
693 new_browser->window()->Show(); | 684 new_browser->window()->Show(); |
(...skipping 19 matching lines...) Expand all Loading... |
713 // what the user expects to duplicate. | 704 // what the user expects to duplicate. |
714 return contents && !contents->ShowingInterstitialPage() && | 705 return contents && !contents->ShowingInterstitialPage() && |
715 contents->GetController().GetLastCommittedEntry(); | 706 contents->GetController().GetLastCommittedEntry(); |
716 } | 707 } |
717 | 708 |
718 void ConvertPopupToTabbedBrowser(Browser* browser) { | 709 void ConvertPopupToTabbedBrowser(Browser* browser) { |
719 content::RecordAction(UserMetricsAction("ShowAsTab")); | 710 content::RecordAction(UserMetricsAction("ShowAsTab")); |
720 TabStripModel* tab_strip = browser->tab_strip_model(); | 711 TabStripModel* tab_strip = browser->tab_strip_model(); |
721 WebContents* contents = | 712 WebContents* contents = |
722 tab_strip->DetachWebContentsAt(tab_strip->active_index()); | 713 tab_strip->DetachWebContentsAt(tab_strip->active_index()); |
723 Browser* b = new Browser(Browser::CreateParams(browser->profile(), | 714 Browser* b = new Browser(Browser::CreateParams(browser->profile())); |
724 browser->host_desktop_type())); | |
725 b->tab_strip_model()->AppendWebContents(contents, true); | 715 b->tab_strip_model()->AppendWebContents(contents, true); |
726 b->window()->Show(); | 716 b->window()->Show(); |
727 } | 717 } |
728 | 718 |
729 void Exit() { | 719 void Exit() { |
730 content::RecordAction(UserMetricsAction("Exit")); | 720 content::RecordAction(UserMetricsAction("Exit")); |
731 chrome::AttemptUserExit(); | 721 chrome::AttemptUserExit(); |
732 } | 722 } |
733 | 723 |
734 void BookmarkCurrentPageIgnoringExtensionOverrides(Browser* browser) { | 724 void BookmarkCurrentPageIgnoringExtensionOverrides(Browser* browser) { |
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1223 // window next to the tab being duplicated. | 1213 // window next to the tab being duplicated. |
1224 int index = browser->tab_strip_model()->GetIndexOfWebContents(contents); | 1214 int index = browser->tab_strip_model()->GetIndexOfWebContents(contents); |
1225 int add_types = TabStripModel::ADD_ACTIVE | | 1215 int add_types = TabStripModel::ADD_ACTIVE | |
1226 TabStripModel::ADD_INHERIT_GROUP; | 1216 TabStripModel::ADD_INHERIT_GROUP; |
1227 browser->tab_strip_model()->InsertWebContentsAt( | 1217 browser->tab_strip_model()->InsertWebContentsAt( |
1228 index + 1, | 1218 index + 1, |
1229 view_source_contents, | 1219 view_source_contents, |
1230 add_types); | 1220 add_types); |
1231 } else { | 1221 } else { |
1232 Browser* b = new Browser( | 1222 Browser* b = new Browser( |
1233 Browser::CreateParams(Browser::TYPE_TABBED, browser->profile(), | 1223 Browser::CreateParams(Browser::TYPE_TABBED, browser->profile())); |
1234 browser->host_desktop_type())); | |
1235 | 1224 |
1236 // Preserve the size of the original window. The new window has already | 1225 // Preserve the size of the original window. The new window has already |
1237 // been given an offset by the OS, so we shouldn't copy the old bounds. | 1226 // been given an offset by the OS, so we shouldn't copy the old bounds. |
1238 BrowserWindow* new_window = b->window(); | 1227 BrowserWindow* new_window = b->window(); |
1239 new_window->SetBounds(gfx::Rect(new_window->GetRestoredBounds().origin(), | 1228 new_window->SetBounds(gfx::Rect(new_window->GetRestoredBounds().origin(), |
1240 browser->window()->GetRestoredBounds().size())); | 1229 browser->window()->GetRestoredBounds().size())); |
1241 | 1230 |
1242 // We need to show the browser now. Otherwise ContainerWin assumes the | 1231 // We need to show the browser now. Otherwise ContainerWin assumes the |
1243 // WebContents is invisible and won't size it. | 1232 // WebContents is invisible and won't size it. |
1244 b->window()->Show(); | 1233 b->window()->Show(); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1294 | 1283 |
1295 void ConvertTabToAppWindow(Browser* browser, | 1284 void ConvertTabToAppWindow(Browser* browser, |
1296 content::WebContents* contents) { | 1285 content::WebContents* contents) { |
1297 const GURL& url = contents->GetController().GetLastCommittedEntry()->GetURL(); | 1286 const GURL& url = contents->GetController().GetLastCommittedEntry()->GetURL(); |
1298 std::string app_name = web_app::GenerateApplicationNameFromURL(url); | 1287 std::string app_name = web_app::GenerateApplicationNameFromURL(url); |
1299 | 1288 |
1300 int index = browser->tab_strip_model()->GetIndexOfWebContents(contents); | 1289 int index = browser->tab_strip_model()->GetIndexOfWebContents(contents); |
1301 if (index >= 0) | 1290 if (index >= 0) |
1302 browser->tab_strip_model()->DetachWebContentsAt(index); | 1291 browser->tab_strip_model()->DetachWebContentsAt(index); |
1303 | 1292 |
1304 Browser* app_browser = new Browser( | 1293 Browser* app_browser = new Browser(Browser::CreateParams::CreateForApp( |
1305 Browser::CreateParams::CreateForApp(app_name, | 1294 app_name, true /* trusted_source */, gfx::Rect(), browser->profile())); |
1306 true /* trusted_source */, | |
1307 gfx::Rect(), | |
1308 browser->profile(), | |
1309 browser->host_desktop_type())); | |
1310 app_browser->tab_strip_model()->AppendWebContents(contents, true); | 1295 app_browser->tab_strip_model()->AppendWebContents(contents, true); |
1311 | 1296 |
1312 contents->GetMutableRendererPrefs()->can_accept_load_drops = false; | 1297 contents->GetMutableRendererPrefs()->can_accept_load_drops = false; |
1313 contents->GetRenderViewHost()->SyncRendererPrefs(); | 1298 contents->GetRenderViewHost()->SyncRendererPrefs(); |
1314 app_browser->window()->Show(); | 1299 app_browser->window()->Show(); |
1315 } | 1300 } |
1316 #endif // defined(ENABLE_EXTENSIONS) | 1301 #endif // defined(ENABLE_EXTENSIONS) |
1317 | 1302 |
1318 } // namespace chrome | 1303 } // namespace chrome |
OLD | NEW |