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 #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" | 5 #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 #import "chrome/browser/ui/cocoa/first_run_bubble_controller.h" | 35 #import "chrome/browser/ui/cocoa/first_run_bubble_controller.h" |
36 #import "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field.h" | 36 #import "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field.h" |
37 #import "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_cell.h" | 37 #import "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_cell.h" |
38 #import "chrome/browser/ui/cocoa/location_bar/content_setting_decoration.h" | 38 #import "chrome/browser/ui/cocoa/location_bar/content_setting_decoration.h" |
39 #import "chrome/browser/ui/cocoa/location_bar/ev_bubble_decoration.h" | 39 #import "chrome/browser/ui/cocoa/location_bar/ev_bubble_decoration.h" |
40 #import "chrome/browser/ui/cocoa/location_bar/generated_credit_card_decoration.h
" | 40 #import "chrome/browser/ui/cocoa/location_bar/generated_credit_card_decoration.h
" |
41 #import "chrome/browser/ui/cocoa/location_bar/keyword_hint_decoration.h" | 41 #import "chrome/browser/ui/cocoa/location_bar/keyword_hint_decoration.h" |
42 #import "chrome/browser/ui/cocoa/location_bar/location_icon_decoration.h" | 42 #import "chrome/browser/ui/cocoa/location_bar/location_icon_decoration.h" |
43 #import "chrome/browser/ui/cocoa/location_bar/manage_passwords_decoration.h" | 43 #import "chrome/browser/ui/cocoa/location_bar/manage_passwords_decoration.h" |
44 #import "chrome/browser/ui/cocoa/location_bar/mic_search_decoration.h" | 44 #import "chrome/browser/ui/cocoa/location_bar/mic_search_decoration.h" |
45 #import "chrome/browser/ui/cocoa/location_bar/origin_chip_decoration.h" | |
46 #import "chrome/browser/ui/cocoa/location_bar/page_action_decoration.h" | 45 #import "chrome/browser/ui/cocoa/location_bar/page_action_decoration.h" |
47 #import "chrome/browser/ui/cocoa/location_bar/search_button_decoration.h" | 46 #import "chrome/browser/ui/cocoa/location_bar/search_button_decoration.h" |
48 #import "chrome/browser/ui/cocoa/location_bar/selected_keyword_decoration.h" | 47 #import "chrome/browser/ui/cocoa/location_bar/selected_keyword_decoration.h" |
49 #import "chrome/browser/ui/cocoa/location_bar/star_decoration.h" | 48 #import "chrome/browser/ui/cocoa/location_bar/star_decoration.h" |
50 #import "chrome/browser/ui/cocoa/location_bar/translate_decoration.h" | 49 #import "chrome/browser/ui/cocoa/location_bar/translate_decoration.h" |
51 #import "chrome/browser/ui/cocoa/location_bar/zoom_decoration.h" | 50 #import "chrome/browser/ui/cocoa/location_bar/zoom_decoration.h" |
52 #import "chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.h" | 51 #import "chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.h" |
53 #include "chrome/browser/ui/content_settings/content_setting_bubble_model.h" | 52 #include "chrome/browser/ui/content_settings/content_setting_bubble_model.h" |
54 #include "chrome/browser/ui/content_settings/content_setting_image_model.h" | 53 #include "chrome/browser/ui/content_settings/content_setting_image_model.h" |
55 #import "chrome/browser/ui/omnibox/omnibox_popup_model.h" | 54 #import "chrome/browser/ui/omnibox/omnibox_popup_model.h" |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 base::Unretained(this))); | 131 base::Unretained(this))); |
133 | 132 |
134 browser_->search_model()->AddObserver(this); | 133 browser_->search_model()->AddObserver(this); |
135 | 134 |
136 ui_zoom::ZoomEventManager::GetForBrowserContext(profile) | 135 ui_zoom::ZoomEventManager::GetForBrowserContext(profile) |
137 ->AddZoomEventManagerObserver(this); | 136 ->AddZoomEventManagerObserver(this); |
138 | 137 |
139 [[field_ cell] setIsPopupMode: | 138 [[field_ cell] setIsPopupMode: |
140 !browser->SupportsWindowFeature(Browser::FEATURE_TABSTRIP)]; | 139 !browser->SupportsWindowFeature(Browser::FEATURE_TABSTRIP)]; |
141 | 140 |
142 if (chrome::ShouldDisplayOriginChip()) | |
143 origin_chip_decoration_.reset(new OriginChipDecoration( | |
144 this, location_icon_decoration_.get())); | |
145 | |
146 // Sets images for the decorations, and performs a layout. This call ensures | 141 // Sets images for the decorations, and performs a layout. This call ensures |
147 // that this class is in a consistent state after initialization. | 142 // that this class is in a consistent state after initialization. |
148 OnChanged(); | 143 OnChanged(); |
149 } | 144 } |
150 | 145 |
151 LocationBarViewMac::~LocationBarViewMac() { | 146 LocationBarViewMac::~LocationBarViewMac() { |
152 // Disconnect from cell in case it outlives us. | 147 // Disconnect from cell in case it outlives us. |
153 [[field_ cell] clearDecorations]; | 148 [[field_ cell] clearDecorations]; |
154 | 149 |
155 browser_->search_model()->RemoveObserver(this); | 150 browser_->search_model()->RemoveObserver(this); |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 | 357 |
363 NSPoint LocationBarViewMac::GetTranslateBubblePoint() const { | 358 NSPoint LocationBarViewMac::GetTranslateBubblePoint() const { |
364 return [field_ bubblePointForDecoration:translate_decoration_.get()]; | 359 return [field_ bubblePointForDecoration:translate_decoration_.get()]; |
365 } | 360 } |
366 | 361 |
367 NSPoint LocationBarViewMac::GetManagePasswordsBubblePoint() const { | 362 NSPoint LocationBarViewMac::GetManagePasswordsBubblePoint() const { |
368 return [field_ bubblePointForDecoration:manage_passwords_decoration_.get()]; | 363 return [field_ bubblePointForDecoration:manage_passwords_decoration_.get()]; |
369 } | 364 } |
370 | 365 |
371 NSPoint LocationBarViewMac::GetPageInfoBubblePoint() const { | 366 NSPoint LocationBarViewMac::GetPageInfoBubblePoint() const { |
372 if (origin_chip_decoration_ && origin_chip_decoration_->IsVisible()) { | 367 if (ev_bubble_decoration_->IsVisible()) { |
373 return [field_ bubblePointForDecoration:origin_chip_decoration_.get()]; | |
374 } else if (ev_bubble_decoration_->IsVisible()) { | |
375 return [field_ bubblePointForDecoration:ev_bubble_decoration_.get()]; | 368 return [field_ bubblePointForDecoration:ev_bubble_decoration_.get()]; |
376 } else { | 369 } else { |
377 return [field_ bubblePointForDecoration:location_icon_decoration_.get()]; | 370 return [field_ bubblePointForDecoration:location_icon_decoration_.get()]; |
378 } | 371 } |
379 } | 372 } |
380 | 373 |
381 NSPoint LocationBarViewMac::GetGeneratedCreditCardBubblePoint() const { | 374 NSPoint LocationBarViewMac::GetGeneratedCreditCardBubblePoint() const { |
382 return | 375 return |
383 [field_ bubblePointForDecoration:generated_credit_card_decoration_.get()]; | 376 [field_ bubblePointForDecoration:generated_credit_card_decoration_.get()]; |
384 } | 377 } |
385 | 378 |
386 void LocationBarViewMac::OnDecorationsChanged() { | 379 void LocationBarViewMac::OnDecorationsChanged() { |
387 // TODO(shess): The field-editor frame and cursor rects should not | 380 // TODO(shess): The field-editor frame and cursor rects should not |
388 // change, here. | 381 // change, here. |
389 [field_ updateMouseTracking]; | 382 [field_ updateMouseTracking]; |
390 [field_ resetFieldEditorFrameIfNeeded]; | 383 [field_ resetFieldEditorFrameIfNeeded]; |
391 [field_ setNeedsDisplay:YES]; | 384 [field_ setNeedsDisplay:YES]; |
392 } | 385 } |
393 | 386 |
394 // TODO(shess): This function should over time grow to closely match | 387 // TODO(shess): This function should over time grow to closely match |
395 // the views Layout() function. | 388 // the views Layout() function. |
396 void LocationBarViewMac::Layout() { | 389 void LocationBarViewMac::Layout() { |
397 AutocompleteTextFieldCell* cell = [field_ cell]; | 390 AutocompleteTextFieldCell* cell = [field_ cell]; |
398 | 391 |
399 // Reset the left-hand decorations. | 392 // Reset the left-hand decorations. |
400 // TODO(shess): Shortly, this code will live somewhere else, like in | 393 // TODO(shess): Shortly, this code will live somewhere else, like in |
401 // the constructor. I am still wrestling with how best to deal with | 394 // the constructor. I am still wrestling with how best to deal with |
402 // right-hand decorations, which are not a static set. | 395 // right-hand decorations, which are not a static set. |
403 [cell clearDecorations]; | 396 [cell clearDecorations]; |
404 if (origin_chip_decoration_.get()) | |
405 [cell addLeftDecoration:origin_chip_decoration_.get()]; | |
406 [cell addLeftDecoration:location_icon_decoration_.get()]; | 397 [cell addLeftDecoration:location_icon_decoration_.get()]; |
407 [cell addLeftDecoration:selected_keyword_decoration_.get()]; | 398 [cell addLeftDecoration:selected_keyword_decoration_.get()]; |
408 if (!origin_chip_decoration_.get()) | 399 [cell addLeftDecoration:ev_bubble_decoration_.get()]; |
409 [cell addLeftDecoration:ev_bubble_decoration_.get()]; | |
410 [cell addRightDecoration:search_button_decoration_.get()]; | 400 [cell addRightDecoration:search_button_decoration_.get()]; |
411 [cell addRightDecoration:star_decoration_.get()]; | 401 [cell addRightDecoration:star_decoration_.get()]; |
412 [cell addRightDecoration:translate_decoration_.get()]; | 402 [cell addRightDecoration:translate_decoration_.get()]; |
413 [cell addRightDecoration:zoom_decoration_.get()]; | 403 [cell addRightDecoration:zoom_decoration_.get()]; |
414 [cell addRightDecoration:generated_credit_card_decoration_.get()]; | 404 [cell addRightDecoration:generated_credit_card_decoration_.get()]; |
415 [cell addRightDecoration:manage_passwords_decoration_.get()]; | 405 [cell addRightDecoration:manage_passwords_decoration_.get()]; |
416 | 406 |
417 // Note that display order is right to left. | 407 // Note that display order is right to left. |
418 for (size_t i = 0; i < page_action_decorations_.size(); ++i) { | 408 for (size_t i = 0; i < page_action_decorations_.size(); ++i) { |
419 [cell addRightDecoration:page_action_decorations_[i]]; | 409 [cell addRightDecoration:page_action_decorations_[i]]; |
420 } | 410 } |
421 | 411 |
422 for (ScopedVector<ContentSettingDecoration>::iterator i = | 412 for (ScopedVector<ContentSettingDecoration>::iterator i = |
423 content_setting_decorations_.begin(); | 413 content_setting_decorations_.begin(); |
424 i != content_setting_decorations_.end(); ++i) { | 414 i != content_setting_decorations_.end(); ++i) { |
425 [cell addRightDecoration:*i]; | 415 [cell addRightDecoration:*i]; |
426 } | 416 } |
427 | 417 |
428 [cell addRightDecoration:keyword_hint_decoration_.get()]; | 418 [cell addRightDecoration:keyword_hint_decoration_.get()]; |
429 [cell addRightDecoration:mic_search_decoration_.get()]; | 419 [cell addRightDecoration:mic_search_decoration_.get()]; |
430 | 420 |
431 // By default only the location icon is visible. | 421 // By default only the location icon is visible. |
432 location_icon_decoration_->SetVisible(!origin_chip_decoration_.get() || | 422 location_icon_decoration_->SetVisible(true); |
433 !origin_chip_decoration_->IsVisible()); | |
434 selected_keyword_decoration_->SetVisible(false); | 423 selected_keyword_decoration_->SetVisible(false); |
435 ev_bubble_decoration_->SetVisible(false); | 424 ev_bubble_decoration_->SetVisible(false); |
436 keyword_hint_decoration_->SetVisible(false); | 425 keyword_hint_decoration_->SetVisible(false); |
437 | 426 |
438 // Get the keyword to use for keyword-search and hinting. | 427 // Get the keyword to use for keyword-search and hinting. |
439 const base::string16 keyword = omnibox_view_->model()->keyword(); | 428 const base::string16 keyword = omnibox_view_->model()->keyword(); |
440 base::string16 short_name; | 429 base::string16 short_name; |
441 bool is_extension_keyword = false; | 430 bool is_extension_keyword = false; |
442 if (!keyword.empty()) { | 431 if (!keyword.empty()) { |
443 short_name = TemplateURLServiceFactory::GetForProfile(profile())-> | 432 short_name = TemplateURLServiceFactory::GetForProfile(profile())-> |
444 GetKeywordShortName(keyword, &is_extension_keyword); | 433 GetKeywordShortName(keyword, &is_extension_keyword); |
445 } | 434 } |
446 | 435 |
447 const bool is_keyword_hint = omnibox_view_->model()->is_keyword_hint(); | 436 const bool is_keyword_hint = omnibox_view_->model()->is_keyword_hint(); |
448 if (!keyword.empty() && !is_keyword_hint) { | 437 if (!keyword.empty() && !is_keyword_hint) { |
449 // Switch from location icon to keyword mode. | 438 // Switch from location icon to keyword mode. |
450 location_icon_decoration_->SetVisible(false); | 439 location_icon_decoration_->SetVisible(false); |
451 selected_keyword_decoration_->SetVisible(true); | 440 selected_keyword_decoration_->SetVisible(true); |
452 selected_keyword_decoration_->SetKeyword(short_name, is_extension_keyword); | 441 selected_keyword_decoration_->SetKeyword(short_name, is_extension_keyword); |
453 selected_keyword_decoration_->SetImage(GetKeywordImage(keyword)); | 442 selected_keyword_decoration_->SetImage(GetKeywordImage(keyword)); |
454 } else if ((GetToolbarModel()->GetSecurityLevel(false) == | 443 } else if ((GetToolbarModel()->GetSecurityLevel(false) == |
455 ToolbarModel::EV_SECURE) && !origin_chip_decoration_.get()) { | 444 ToolbarModel::EV_SECURE)) { |
456 // Switch from location icon to show the EV bubble instead. | 445 // Switch from location icon to show the EV bubble instead. |
457 location_icon_decoration_->SetVisible(false); | 446 location_icon_decoration_->SetVisible(false); |
458 ev_bubble_decoration_->SetVisible(true); | 447 ev_bubble_decoration_->SetVisible(true); |
459 | 448 |
460 base::string16 label(GetToolbarModel()->GetEVCertName()); | 449 base::string16 label(GetToolbarModel()->GetEVCertName()); |
461 ev_bubble_decoration_->SetFullLabel(base::SysUTF16ToNSString(label)); | 450 ev_bubble_decoration_->SetFullLabel(base::SysUTF16ToNSString(label)); |
462 } else if (!keyword.empty() && is_keyword_hint) { | 451 } else if (!keyword.empty() && is_keyword_hint) { |
463 keyword_hint_decoration_->SetKeyword(short_name, | 452 keyword_hint_decoration_->SetKeyword(short_name, |
464 is_extension_keyword); | 453 is_extension_keyword); |
465 keyword_hint_decoration_->SetVisible(true); | 454 keyword_hint_decoration_->SetVisible(true); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 OnChanged(); | 536 OnChanged(); |
548 } | 537 } |
549 | 538 |
550 void LocationBarViewMac::OnChanged() { | 539 void LocationBarViewMac::OnChanged() { |
551 // Update the location-bar icon. | 540 // Update the location-bar icon. |
552 const int resource_id = omnibox_view_->GetIcon(); | 541 const int resource_id = omnibox_view_->GetIcon(); |
553 NSImage* image = OmniboxViewMac::ImageForResource(resource_id); | 542 NSImage* image = OmniboxViewMac::ImageForResource(resource_id); |
554 location_icon_decoration_->SetImage(image); | 543 location_icon_decoration_->SetImage(image); |
555 ev_bubble_decoration_->SetImage(image); | 544 ev_bubble_decoration_->SetImage(image); |
556 | 545 |
557 if (origin_chip_decoration_.get()) | |
558 origin_chip_decoration_->Update(); | |
559 | |
560 ToolbarModel* toolbar_model = GetToolbarModel(); | 546 ToolbarModel* toolbar_model = GetToolbarModel(); |
561 const chrome::DisplaySearchButtonConditions conditions = | 547 const chrome::DisplaySearchButtonConditions conditions = |
562 chrome::GetDisplaySearchButtonConditions(); | 548 chrome::GetDisplaySearchButtonConditions(); |
563 const bool meets_conditions = | 549 const bool meets_conditions = |
564 (conditions == chrome::DISPLAY_SEARCH_BUTTON_ALWAYS) || | 550 (conditions == chrome::DISPLAY_SEARCH_BUTTON_ALWAYS) || |
565 ((conditions != chrome::DISPLAY_SEARCH_BUTTON_NEVER) && | 551 ((conditions != chrome::DISPLAY_SEARCH_BUTTON_NEVER) && |
566 (toolbar_model->WouldPerformSearchTermReplacement(true) || | 552 (toolbar_model->WouldPerformSearchTermReplacement(true) || |
567 ((conditions == chrome::DISPLAY_SEARCH_BUTTON_FOR_STR_OR_IIP) && | 553 ((conditions == chrome::DISPLAY_SEARCH_BUTTON_FOR_STR_OR_IIP) && |
568 toolbar_model->input_in_progress()))); | 554 toolbar_model->input_in_progress()))); |
569 search_button_decoration_->SetVisible( | 555 search_button_decoration_->SetVisible( |
(...skipping 14 matching lines...) Expand all Loading... |
584 | 570 |
585 void LocationBarViewMac::OnSetFocus() { | 571 void LocationBarViewMac::OnSetFocus() { |
586 // Update the keyword and search hint states. | 572 // Update the keyword and search hint states. |
587 OnChanged(); | 573 OnChanged(); |
588 } | 574 } |
589 | 575 |
590 void LocationBarViewMac::ShowURL() { | 576 void LocationBarViewMac::ShowURL() { |
591 omnibox_view_->ShowURL(); | 577 omnibox_view_->ShowURL(); |
592 } | 578 } |
593 | 579 |
594 void LocationBarViewMac::HideURL() { | |
595 omnibox_view_->HideURL(); | |
596 } | |
597 | |
598 void LocationBarViewMac::EndOriginChipAnimations(bool cancel_fade) { | |
599 } | |
600 | |
601 InstantController* LocationBarViewMac::GetInstant() { | 580 InstantController* LocationBarViewMac::GetInstant() { |
602 return browser_->instant_controller() ? | 581 return browser_->instant_controller() ? |
603 browser_->instant_controller()->instant() : NULL; | 582 browser_->instant_controller()->instant() : NULL; |
604 } | 583 } |
605 | 584 |
606 WebContents* LocationBarViewMac::GetWebContents() { | 585 WebContents* LocationBarViewMac::GetWebContents() { |
607 return browser_->tab_strip_model()->GetActiveWebContents(); | 586 return browser_->tab_strip_model()->GetActiveWebContents(); |
608 } | 587 } |
609 | 588 |
610 ToolbarModel* LocationBarViewMac::GetToolbarModel() { | 589 ToolbarModel* LocationBarViewMac::GetToolbarModel() { |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
777 } | 756 } |
778 | 757 |
779 bool LocationBarViewMac::UpdateMicSearchDecorationVisibility() { | 758 bool LocationBarViewMac::UpdateMicSearchDecorationVisibility() { |
780 bool is_visible = !GetToolbarModel()->input_in_progress() && | 759 bool is_visible = !GetToolbarModel()->input_in_progress() && |
781 browser_->search_model()->voice_search_supported(); | 760 browser_->search_model()->voice_search_supported(); |
782 if (mic_search_decoration_->IsVisible() == is_visible) | 761 if (mic_search_decoration_->IsVisible() == is_visible) |
783 return false; | 762 return false; |
784 mic_search_decoration_->SetVisible(is_visible); | 763 mic_search_decoration_->SetVisible(is_visible); |
785 return true; | 764 return true; |
786 } | 765 } |
OLD | NEW |