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

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

Issue 10677009: Move command handling and updating off Browser and onto a helper object. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 6 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_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/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/bookmarks/bookmark_editor.h"
10 #include "chrome/browser/bookmarks/bookmark_model.h" 11 #include "chrome/browser/bookmarks/bookmark_model.h"
11 #include "chrome/browser/bookmarks/bookmark_utils.h" 12 #include "chrome/browser/bookmarks/bookmark_utils.h"
12 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/chrome_page_zoom.h" 14 #include "chrome/browser/chrome_page_zoom.h"
14 #include "chrome/browser/debugger/devtools_window.h" 15 #include "chrome/browser/debugger/devtools_window.h"
16 #include "chrome/browser/download/download_util.h"
15 #include "chrome/browser/extensions/extension_service.h" 17 #include "chrome/browser/extensions/extension_service.h"
16 #include "chrome/browser/favicon/favicon_tab_helper.h" 18 #include "chrome/browser/favicon/favicon_tab_helper.h"
17 #include "chrome/browser/lifetime/application_lifetime.h" 19 #include "chrome/browser/lifetime/application_lifetime.h"
18 #include "chrome/browser/platform_util.h" 20 #include "chrome/browser/platform_util.h"
19 #include "chrome/browser/prefs/incognito_mode_prefs.h" 21 #include "chrome/browser/prefs/incognito_mode_prefs.h"
20 #include "chrome/browser/prefs/pref_service.h" 22 #include "chrome/browser/prefs/pref_service.h"
23 #include "chrome/browser/printing/print_preview_tab_controller.h"
21 #include "chrome/browser/printing/print_view_manager.h" 24 #include "chrome/browser/printing/print_view_manager.h"
22 #include "chrome/browser/profiles/profile.h" 25 #include "chrome/browser/profiles/profile.h"
23 #include "chrome/browser/sessions/session_service_factory.h" 26 #include "chrome/browser/sessions/session_service_factory.h"
24 #include "chrome/browser/sessions/tab_restore_service_factory.h" 27 #include "chrome/browser/sessions/tab_restore_service_factory.h"
25 #include "chrome/browser/sessions/tab_restore_service.h" 28 #include "chrome/browser/sessions/tab_restore_service.h"
29 #include "chrome/browser/sessions/tab_restore_service_delegate.h"
26 #include "chrome/browser/ui/browser.h" 30 #include "chrome/browser/ui/browser.h"
31 #include "chrome/browser/ui/browser_command_controller.h"
27 #include "chrome/browser/ui/browser_finder.h" 32 #include "chrome/browser/ui/browser_finder.h"
33 #include "chrome/browser/ui/browser_tab_restore_service_delegate.h"
28 #include "chrome/browser/ui/browser_window.h" 34 #include "chrome/browser/ui/browser_window.h"
35 #include "chrome/browser/ui/constrained_window_tab_helper.h"
29 #include "chrome/browser/ui/find_bar/find_bar_controller.h" 36 #include "chrome/browser/ui/find_bar/find_bar_controller.h"
30 #include "chrome/browser/ui/find_bar/find_tab_helper.h" 37 #include "chrome/browser/ui/find_bar/find_tab_helper.h"
31 #include "chrome/browser/ui/omnibox/location_bar.h" 38 #include "chrome/browser/ui/omnibox/location_bar.h"
32 #include "chrome/browser/ui/status_bubble.h" 39 #include "chrome/browser/ui/status_bubble.h"
33 #include "chrome/browser/ui/tab_contents/tab_contents.h" 40 #include "chrome/browser/ui/tab_contents/tab_contents.h"
34 #include "chrome/browser/ui/tabs/tab_strip_model.h" 41 #include "chrome/browser/ui/tabs/tab_strip_model.h"
35 #include "chrome/browser/ui/webui/feedback_ui.h" 42 #include "chrome/browser/ui/webui/feedback_ui.h"
36 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h" 43 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h"
44 #include "chrome/browser/web_applications/web_app.h"
37 #include "chrome/common/chrome_switches.h" 45 #include "chrome/common/chrome_switches.h"
38 #include "chrome/common/net/url_util.h" 46 #include "chrome/common/net/url_util.h"
39 #include "chrome/common/pref_names.h" 47 #include "chrome/common/pref_names.h"
48 #include "content/public/common/content_restriction.h"
40 #include "content/public/browser/navigation_controller.h" 49 #include "content/public/browser/navigation_controller.h"
41 #include "content/public/browser/navigation_entry.h" 50 #include "content/public/browser/navigation_entry.h"
42 #include "content/public/browser/page_navigator.h" 51 #include "content/public/browser/page_navigator.h"
43 #include "content/public/browser/render_view_host.h" 52 #include "content/public/browser/render_view_host.h"
44 #include "content/public/browser/user_metrics.h" 53 #include "content/public/browser/user_metrics.h"
45 #include "content/public/browser/web_contents.h" 54 #include "content/public/browser/web_contents.h"
46 #include "content/public/browser/web_contents_view.h" 55 #include "content/public/browser/web_contents_view.h"
47 #include "content/public/common/url_constants.h" 56 #include "content/public/common/url_constants.h"
48 #include "net/base/escape.h" 57 #include "net/base/escape.h"
49 #include "webkit/glue/webkit_glue.h" 58 #include "webkit/glue/webkit_glue.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 WebContents* web_contents = GetOrCloneTabForDisposition(browser, disposition); 125 WebContents* web_contents = GetOrCloneTabForDisposition(browser, disposition);
117 web_contents->UserGestureDone(); 126 web_contents->UserGestureDone();
118 if (!web_contents->FocusLocationBarByDefault()) 127 if (!web_contents->FocusLocationBarByDefault())
119 web_contents->Focus(); 128 web_contents->Focus();
120 if (ignore_cache) 129 if (ignore_cache)
121 web_contents->GetController().ReloadIgnoringCache(true); 130 web_contents->GetController().ReloadIgnoringCache(true);
122 else 131 else
123 web_contents->GetController().Reload(true); 132 web_contents->GetController().Reload(true);
124 } 133 }
125 134
135 bool HasConstrainedWindow(const Browser* browser) {
136 TabContents* tab_contents = browser->GetActiveTabContents();
137 return tab_contents && tab_contents->constrained_window_tab_helper()->
138 constrained_window_count();
139 }
140
141 bool PrintPreviewShowing(const Browser* browser) {
142 TabContents* contents = browser->GetActiveTabContents();
143 printing::PrintPreviewTabController* controller =
144 printing::PrintPreviewTabController::GetInstance();
145 return controller && (controller->GetPrintPreviewForTab(contents) ||
146 controller->is_creating_print_preview_tab());
147 }
148
126 } // namespace 149 } // namespace
127 150
151 bool IsCommandEnabled(Browser* browser, int command) {
152 return browser->command_controller()->command_updater()->IsCommandEnabled(
153 command);
154 }
155
156 bool SupportsCommand(Browser* browser, int command) {
157 return browser->command_controller()->command_updater()->SupportsCommand(
158 command);
159 }
160
161 bool ExecuteCommand(Browser* browser, int command) {
162 return browser->command_controller()->command_updater()->ExecuteCommand(
163 command);
164 }
165
166 bool ExecuteCommandWithDisposition(Browser* browser,
167 int command,
168 WindowOpenDisposition disposition) {
169 return browser->command_controller()->command_updater()->
170 ExecuteCommandWithDisposition(command, disposition);
171 }
172
173 void UpdateCommandEnabled(Browser* browser, int command, bool enabled) {
174 browser->command_controller()->command_updater()->UpdateCommandEnabled(
175 command, enabled);
176 }
177
178 void AddCommandObserver(Browser* browser,
179 int command,
180 CommandObserver* observer) {
181 browser->command_controller()->command_updater()->AddCommandObserver(
182 command, observer);
183 }
184
185 void RemoveCommandObserver(Browser* browser,
186 int command,
187 CommandObserver* observer) {
188 browser->command_controller()->command_updater()->RemoveCommandObserver(
189 command, observer);
190 }
191
192 int GetContentRestrictions(const Browser* browser) {
193 int content_restrictions = 0;
194 WebContents* current_tab = browser->GetActiveWebContents();
195 if (current_tab) {
196 content_restrictions = current_tab->GetContentRestrictions();
197 NavigationEntry* active_entry =
198 current_tab->GetController().GetActiveEntry();
199 // See comment in UpdateCommandsForTabState about why we call url().
200 if (!download_util::IsSavableURL(
201 active_entry ? active_entry->GetURL() : GURL())
202 || current_tab->ShowingInterstitialPage())
sky 2012/06/27 03:09:28 nit: || on previous line.
203 content_restrictions |= content::CONTENT_RESTRICTION_SAVE;
204 if (current_tab->ShowingInterstitialPage())
205 content_restrictions |= content::CONTENT_RESTRICTION_PRINT;
206 }
207 return content_restrictions;
208 }
209
128 void NewEmptyWindow(Profile* profile) { 210 void NewEmptyWindow(Profile* profile) {
129 bool incognito = profile->IsOffTheRecord(); 211 bool incognito = profile->IsOffTheRecord();
130 PrefService* prefs = profile->GetPrefs(); 212 PrefService* prefs = profile->GetPrefs();
131 if (incognito) { 213 if (incognito) {
132 if (IncognitoModePrefs::GetAvailability(prefs) == 214 if (IncognitoModePrefs::GetAvailability(prefs) ==
133 IncognitoModePrefs::DISABLED) { 215 IncognitoModePrefs::DISABLED) {
134 incognito = false; 216 incognito = false;
135 } 217 }
136 } else { 218 } else {
137 if (browser_defaults::kAlwaysOpenIncognitoWindow && 219 if (browser_defaults::kAlwaysOpenIncognitoWindow &&
(...skipping 30 matching lines...) Expand all
168 service->RestoreMostRecentEntry(NULL); 250 service->RestoreMostRecentEntry(NULL);
169 } 251 }
170 252
171 void OpenURLOffTheRecord(Profile* profile, const GURL& url) { 253 void OpenURLOffTheRecord(Profile* profile, const GURL& url) {
172 Browser* browser = browser::FindOrCreateTabbedBrowser( 254 Browser* browser = browser::FindOrCreateTabbedBrowser(
173 profile->GetOffTheRecordProfile()); 255 profile->GetOffTheRecordProfile());
174 browser->AddSelectedTabWithURL(url, content::PAGE_TRANSITION_LINK); 256 browser->AddSelectedTabWithURL(url, content::PAGE_TRANSITION_LINK);
175 browser->window()->Show(); 257 browser->window()->Show();
176 } 258 }
177 259
178 bool CanGoBack(Browser* browser) { 260 bool CanGoBack(const Browser* browser) {
179 return browser->GetActiveWebContents()->GetController().CanGoBack(); 261 return browser->GetActiveWebContents()->GetController().CanGoBack();
180 } 262 }
181 263
182 void GoBack(Browser* browser, WindowOpenDisposition disposition) { 264 void GoBack(Browser* browser, WindowOpenDisposition disposition) {
183 content::RecordAction(UserMetricsAction("Back")); 265 content::RecordAction(UserMetricsAction("Back"));
184 266
185 TabContents* current_tab = browser->GetActiveTabContents(); 267 TabContents* current_tab = browser->GetActiveTabContents();
186 if (CanGoBack(browser)) { 268 if (CanGoBack(browser)) {
187 WebContents* new_tab = GetOrCloneTabForDisposition(browser, disposition); 269 WebContents* new_tab = GetOrCloneTabForDisposition(browser, disposition);
188 // If we are on an interstitial page and clone the tab, it won't be copied 270 // If we are on an interstitial page and clone the tab, it won't be copied
189 // to the new tab, so we don't need to go back. 271 // to the new tab, so we don't need to go back.
190 if (current_tab->web_contents()->ShowingInterstitialPage() && 272 if (current_tab->web_contents()->ShowingInterstitialPage() &&
191 (new_tab != current_tab->web_contents())) 273 (new_tab != current_tab->web_contents()))
192 return; 274 return;
193 new_tab->GetController().GoBack(); 275 new_tab->GetController().GoBack();
194 } 276 }
195 } 277 }
196 278
197 bool CanGoForward(Browser* browser) { 279 bool CanGoForward(const Browser* browser) {
198 return browser->GetActiveWebContents()->GetController().CanGoForward(); 280 return browser->GetActiveWebContents()->GetController().CanGoForward();
199 } 281 }
200 282
201 void GoForward(Browser* browser, WindowOpenDisposition disposition) { 283 void GoForward(Browser* browser, WindowOpenDisposition disposition) {
202 content::RecordAction(UserMetricsAction("Forward")); 284 content::RecordAction(UserMetricsAction("Forward"));
203 if (CanGoForward(browser)) { 285 if (CanGoForward(browser)) {
204 GetOrCloneTabForDisposition(browser, disposition)-> 286 GetOrCloneTabForDisposition(browser, disposition)->
205 GetController().GoForward(); 287 GetController().GoForward();
206 } 288 }
207 } 289 }
(...skipping 12 matching lines...) Expand all
220 void Reload(Browser* browser, WindowOpenDisposition disposition) { 302 void Reload(Browser* browser, WindowOpenDisposition disposition) {
221 content::RecordAction(UserMetricsAction("Reload")); 303 content::RecordAction(UserMetricsAction("Reload"));
222 ReloadInternal(browser, disposition, false); 304 ReloadInternal(browser, disposition, false);
223 } 305 }
224 306
225 void ReloadIgnoringCache(Browser* browser, WindowOpenDisposition disposition) { 307 void ReloadIgnoringCache(Browser* browser, WindowOpenDisposition disposition) {
226 content::RecordAction(UserMetricsAction("ReloadIgnoringCache")); 308 content::RecordAction(UserMetricsAction("ReloadIgnoringCache"));
227 ReloadInternal(browser, disposition, true); 309 ReloadInternal(browser, disposition, true);
228 } 310 }
229 311
312 bool CanReload(const Browser* browser) {
313 return !browser->is_devtools();
314 }
315
230 void Home(Browser* browser, WindowOpenDisposition disposition) { 316 void Home(Browser* browser, WindowOpenDisposition disposition) {
231 content::RecordAction(UserMetricsAction("Home")); 317 content::RecordAction(UserMetricsAction("Home"));
232 browser->OpenURL(OpenURLParams( 318 browser->OpenURL(OpenURLParams(
233 browser->profile()->GetHomePage(), Referrer(), disposition, 319 browser->profile()->GetHomePage(), Referrer(), disposition,
234 content::PageTransitionFromInt( 320 content::PageTransitionFromInt(
235 content::PAGE_TRANSITION_AUTO_BOOKMARK | 321 content::PAGE_TRANSITION_AUTO_BOOKMARK |
236 content::PAGE_TRANSITION_HOME_PAGE), 322 content::PAGE_TRANSITION_HOME_PAGE),
237 false)); 323 false));
238 } 324 }
239 325
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 // See http://crbug.com/6380. 394 // See http://crbug.com/6380.
309 b->GetActiveWebContents()->GetView()->RestoreFocus(); 395 b->GetActiveWebContents()->GetView()->RestoreFocus();
310 } 396 }
311 } 397 }
312 398
313 void CloseTab(Browser* browser) { 399 void CloseTab(Browser* browser) {
314 content::RecordAction(UserMetricsAction("CloseTab_Accelerator")); 400 content::RecordAction(UserMetricsAction("CloseTab_Accelerator"));
315 browser->tab_strip_model()->CloseSelectedTabs(); 401 browser->tab_strip_model()->CloseSelectedTabs();
316 } 402 }
317 403
404 void RestoreTab(Browser* browser) {
405 content::RecordAction(UserMetricsAction("RestoreTab"));
406 TabRestoreService* service =
407 TabRestoreServiceFactory::GetForProfile(browser->profile());
408 if (service)
409 service->RestoreMostRecentEntry(browser->tab_restore_service_delegate());
410 }
411
412 bool CanRestoreTab(const Browser* browser) {
413 TabRestoreService* service =
414 TabRestoreServiceFactory::GetForProfile(browser->profile());
415 return service ? !service->entries().empty() : false;
sky 2012/06/27 03:09:28 nit: return service && !service->entries().empty()
416 }
417
318 void SelectNextTab(Browser* browser) { 418 void SelectNextTab(Browser* browser) {
319 content::RecordAction(UserMetricsAction("SelectNextTab")); 419 content::RecordAction(UserMetricsAction("SelectNextTab"));
320 browser->tab_strip_model()->SelectNextTab(); 420 browser->tab_strip_model()->SelectNextTab();
321 } 421 }
322 422
323 void SelectPreviousTab(Browser* browser) { 423 void SelectPreviousTab(Browser* browser) {
324 content::RecordAction(UserMetricsAction("SelectPrevTab")); 424 content::RecordAction(UserMetricsAction("SelectPrevTab"));
325 browser->tab_strip_model()->SelectPreviousTab(); 425 browser->tab_strip_model()->SelectPreviousTab();
326 } 426 }
327 427
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 void SelectLastTab(Browser* browser) { 459 void SelectLastTab(Browser* browser) {
360 content::RecordAction(UserMetricsAction("SelectLastTab")); 460 content::RecordAction(UserMetricsAction("SelectLastTab"));
361 browser->tab_strip_model()->SelectLastTab(); 461 browser->tab_strip_model()->SelectLastTab();
362 } 462 }
363 463
364 void DuplicateTab(Browser* browser) { 464 void DuplicateTab(Browser* browser) {
365 content::RecordAction(UserMetricsAction("Duplicate")); 465 content::RecordAction(UserMetricsAction("Duplicate"));
366 browser->DuplicateContentsAt(browser->active_index()); 466 browser->DuplicateContentsAt(browser->active_index());
367 } 467 }
368 468
469 bool CanDuplicateTab(const Browser* browser) {
470 WebContents* contents = browser->GetActiveWebContents();
471 return contents && contents->GetController().GetLastCommittedEntry();
472 }
473
369 void WriteCurrentURLToClipboard(Browser* browser) { 474 void WriteCurrentURLToClipboard(Browser* browser) {
370 // TODO(ericu): There isn't currently a metric for this. Should there be? 475 // TODO(ericu): There isn't currently a metric for this. Should there be?
371 // We don't appear to track the action when it comes from the 476 // We don't appear to track the action when it comes from the
372 // RenderContextViewMenu. 477 // RenderContextViewMenu.
373 478
374 WebContents* contents = browser->GetActiveWebContents(); 479 WebContents* contents = browser->GetActiveWebContents();
375 if (!browser->toolbar_model()->ShouldDisplayURL()) 480 if (!browser->toolbar_model()->ShouldDisplayURL())
376 return; 481 return;
377 482
378 chrome_common_net::WriteURLToClipboard( 483 chrome_common_net::WriteURLToClipboard(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 bookmark_utils::AddIfNotBookmarked(model, url, title); 520 bookmark_utils::AddIfNotBookmarked(model, url, title);
416 // Make sure the model actually added a bookmark before showing the star. A 521 // Make sure the model actually added a bookmark before showing the star. A
417 // bookmark isn't created if the url is invalid. 522 // bookmark isn't created if the url is invalid.
418 if (browser->window()->IsActive() && model->IsBookmarked(url)) { 523 if (browser->window()->IsActive() && model->IsBookmarked(url)) {
419 // Only show the bubble if the window is active, otherwise we may get into 524 // Only show the bubble if the window is active, otherwise we may get into
420 // weird situations where the bubble is deleted as soon as it is shown. 525 // weird situations where the bubble is deleted as soon as it is shown.
421 browser->window()->ShowBookmarkBubble(url, was_bookmarked); 526 browser->window()->ShowBookmarkBubble(url, was_bookmarked);
422 } 527 }
423 } 528 }
424 529
530 bool CanBookmarkCurrentPage(const Browser* browser) {
531 BookmarkModel* model = browser->profile()->GetBookmarkModel();
532 return browser_defaults::bookmarks_enabled &&
533 browser->profile()->GetPrefs()->GetBoolean(
534 prefs::kEditBookmarksEnabled) &&
535 model && model->IsLoaded() && browser->is_type_tabbed();
536 }
537
538 void BookmarkAllTabs(Browser* browser) {
539 BookmarkEditor::ShowBookmarkAllTabsDialog(browser);
540 }
541
542 bool CanBookmarkAllTabs(const Browser* browser) {
543 return browser->tab_count() > 1 && CanBookmarkCurrentPage(browser);
544 }
545
425 #if !defined(OS_WIN) 546 #if !defined(OS_WIN)
426 void PinCurrentPageToStartScreen(Browser* browser) { 547 void PinCurrentPageToStartScreen(Browser* browser) {
427 } 548 }
428 #endif 549 #endif
429 550
430 void SavePage(Browser* browser) { 551 void SavePage(Browser* browser) {
431 content::RecordAction(UserMetricsAction("SavePage")); 552 content::RecordAction(UserMetricsAction("SavePage"));
432 WebContents* current_tab = browser->GetActiveWebContents(); 553 WebContents* current_tab = browser->GetActiveWebContents();
433 if (current_tab && current_tab->GetContentsMimeType() == "application/pdf") 554 if (current_tab && current_tab->GetContentsMimeType() == "application/pdf")
434 content::RecordAction(UserMetricsAction("PDF.SavePage")); 555 content::RecordAction(UserMetricsAction("PDF.SavePage"));
435 current_tab->OnSavePage(); 556 current_tab->OnSavePage();
436 } 557 }
437 558
559 bool CanSavePage(const Browser* browser) {
560 if (!g_browser_process->local_state()->GetBoolean(
561 prefs::kAllowFileSelectionDialogs)) {
562 return false;
563 }
564 return !browser->is_devtools() &&
565 !(GetContentRestrictions(browser) & content::CONTENT_RESTRICTION_SAVE);
566 }
567
438 void ShowFindBar(Browser* browser) { 568 void ShowFindBar(Browser* browser) {
439 browser->GetFindBarController()->Show(); 569 browser->GetFindBarController()->Show();
440 } 570 }
441 571
442 void ShowPageInfo(Browser* browser, 572 void ShowPageInfo(Browser* browser,
443 content::WebContents* web_contents, 573 content::WebContents* web_contents,
444 const GURL& url, 574 const GURL& url,
445 const SSLStatus& ssl, 575 const SSLStatus& ssl,
446 bool show_history) { 576 bool show_history) {
447 Profile* profile = Profile::FromBrowserContext( 577 Profile* profile = Profile::FromBrowserContext(
(...skipping 18 matching lines...) Expand all
466 596
467 void Print(Browser* browser) { 597 void Print(Browser* browser) {
468 if (g_browser_process->local_state()->GetBoolean( 598 if (g_browser_process->local_state()->GetBoolean(
469 prefs::kPrintPreviewDisabled)) { 599 prefs::kPrintPreviewDisabled)) {
470 browser->GetActiveTabContents()->print_view_manager()->PrintNow(); 600 browser->GetActiveTabContents()->print_view_manager()->PrintNow();
471 } else { 601 } else {
472 browser->GetActiveTabContents()->print_view_manager()->PrintPreviewNow(); 602 browser->GetActiveTabContents()->print_view_manager()->PrintPreviewNow();
473 } 603 }
474 } 604 }
475 605
606 bool CanPrint(const Browser* browser) {
607 if (!g_browser_process->local_state()->GetBoolean(prefs::kPrintingEnabled))
608 return false;
609
610 // Do not print when a constrained window is showing. It's confusing.
611 return !(HasConstrainedWindow(browser) ||
612 GetContentRestrictions(browser) & content::CONTENT_RESTRICTION_PRINT);
613 }
614
476 void AdvancedPrint(Browser* browser) { 615 void AdvancedPrint(Browser* browser) {
477 browser->GetActiveTabContents()->print_view_manager()->AdvancedPrintNow(); 616 browser->GetActiveTabContents()->print_view_manager()->AdvancedPrintNow();
478 } 617 }
479 618
619 bool CanAdvancedPrint(const Browser* browser) {
620 if (!g_browser_process->local_state()->GetBoolean(prefs::kPrintingEnabled))
621 return false;
622
623 // It is always possible to advanced print when print preview is visible.
624 return PrintPreviewShowing(browser) || CanPrint(browser);
625 }
626
480 void EmailPageLocation(Browser* browser) { 627 void EmailPageLocation(Browser* browser) {
481 content::RecordAction(UserMetricsAction("EmailPageLocation")); 628 content::RecordAction(UserMetricsAction("EmailPageLocation"));
482 WebContents* wc = browser->GetActiveWebContents(); 629 WebContents* wc = browser->GetActiveWebContents();
483 DCHECK(wc); 630 DCHECK(wc);
484 631
485 std::string title = net::EscapeQueryParamValue( 632 std::string title = net::EscapeQueryParamValue(
486 UTF16ToUTF8(wc->GetTitle()), false); 633 UTF16ToUTF8(wc->GetTitle()), false);
487 std::string page_url = net::EscapeQueryParamValue(wc->GetURL().spec(), false); 634 std::string page_url = net::EscapeQueryParamValue(wc->GetURL().spec(), false);
488 std::string mailto = std::string("mailto:?subject=Fwd:%20") + 635 std::string mailto = std::string("mailto:?subject=Fwd:%20") +
489 title + "&body=%0A%0A" + page_url; 636 title + "&body=%0A%0A" + page_url;
490 platform_util::OpenExternal(GURL(mailto)); 637 platform_util::OpenExternal(GURL(mailto));
491 } 638 }
492 639
640 bool CanEmailPageLocation(const Browser* browser) {
641 return browser->toolbar_model()->ShouldDisplayURL() &&
642 browser->GetActiveWebContents()->GetURL().is_valid();
643 }
644
493 void Cut(Browser* browser) { 645 void Cut(Browser* browser) {
494 content::RecordAction(UserMetricsAction("Cut")); 646 content::RecordAction(UserMetricsAction("Cut"));
495 browser->window()->Cut(); 647 browser->window()->Cut();
496 } 648 }
497 649
498 void Copy(Browser* browser) { 650 void Copy(Browser* browser) {
499 content::RecordAction(UserMetricsAction("Copy")); 651 content::RecordAction(UserMetricsAction("Copy"));
500 browser->window()->Copy(); 652 browser->window()->Copy();
501 } 653 }
502 654
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 SessionService* session_service = 901 SessionService* session_service =
750 SessionServiceFactory::GetForProfileIfExisting(browser->profile()); 902 SessionServiceFactory::GetForProfileIfExisting(browser->profile());
751 if (session_service) 903 if (session_service)
752 session_service->TabRestored(view_source_contents, false); 904 session_service->TabRestored(view_source_contents, false);
753 } 905 }
754 906
755 void ViewSelectedSource(Browser* browser) { 907 void ViewSelectedSource(Browser* browser) {
756 ViewSource(browser, browser->GetActiveTabContents()); 908 ViewSource(browser, browser->GetActiveTabContents());
757 } 909 }
758 910
911 bool CanViewSource(const Browser* browser) {
912 return browser->GetActiveWebContents()->GetController().CanViewSource();
913 }
914
915 bool CanCreateApplicationShortcuts(const Browser* browser) {
916 return web_app::IsValidUrl(browser->GetActiveWebContents()->GetURL());
917 }
918
759 } // namespace chrome 919 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698