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 #ifndef CHROME_BROWSER_VIEWS_LOCATION_BAR_VIEW_H_ | 5 #ifndef CHROME_BROWSER_VIEWS_LOCATION_BAR_VIEW_H_ |
6 #define CHROME_BROWSER_VIEWS_LOCATION_BAR_VIEW_H_ | 6 #define CHROME_BROWSER_VIEWS_LOCATION_BAR_VIEW_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <map> | 9 #include <map> |
10 #include <vector> | 10 #include <vector> |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 // editing. | 68 // editing. |
69 virtual void OnInputInProgress(bool in_progress) = 0; | 69 virtual void OnInputInProgress(bool in_progress) = 0; |
70 }; | 70 }; |
71 | 71 |
72 enum ColorKind { | 72 enum ColorKind { |
73 BACKGROUND = 0, | 73 BACKGROUND = 0, |
74 TEXT, | 74 TEXT, |
75 SELECTED_TEXT, | 75 SELECTED_TEXT, |
76 DEEMPHASIZED_TEXT, | 76 DEEMPHASIZED_TEXT, |
77 SECURITY_TEXT, | 77 SECURITY_TEXT, |
78 SECURITY_INFO_BUBBLE_TEXT, | |
79 SCHEME_STRIKEOUT, | |
80 NUM_KINDS | |
81 }; | 78 }; |
82 | 79 |
83 LocationBarView(Profile* profile, | 80 LocationBarView(Profile* profile, |
84 CommandUpdater* command_updater, | 81 CommandUpdater* command_updater, |
85 ToolbarModel* model, | 82 ToolbarModel* model, |
86 Delegate* delegate, | 83 Delegate* delegate, |
87 bool popup_window_mode, | 84 bool popup_window_mode, |
88 const BubblePositioner* bubble_positioner); | 85 const BubblePositioner* bubble_positioner); |
89 virtual ~LocationBarView(); | 86 virtual ~LocationBarView(); |
90 | 87 |
91 void Init(); | 88 void Init(); |
92 | 89 |
93 // Returns whether this instance has been initialized by callin Init. Init can | 90 // Returns whether this instance has been initialized by callin Init. Init can |
94 // only be called when the receiving instance is attached to a view container. | 91 // only be called when the receiving instance is attached to a view container. |
95 bool IsInitialized() const; | 92 bool IsInitialized() const; |
96 | 93 |
97 // Returns the appropriate color for the desired kind, based on the user's | 94 // Returns the appropriate color for the desired kind, based on the user's |
98 // system theme. | 95 // system theme. |
99 static SkColor GetColor(bool is_secure, ColorKind kind); | 96 static SkColor GetColor(ToolbarModel::SecurityLevel security_level, |
| 97 ColorKind kind); |
100 | 98 |
101 // Updates the location bar. We also reset the bar's permanent text and | 99 // Updates the location bar. We also reset the bar's permanent text and |
102 // security style, and, if |tab_for_state_restoring| is non-NULL, also restore | 100 // security style, and, if |tab_for_state_restoring| is non-NULL, also restore |
103 // saved state that the tab holds. | 101 // saved state that the tab holds. |
104 void Update(const TabContents* tab_for_state_restoring); | 102 void Update(const TabContents* tab_for_state_restoring); |
105 | 103 |
106 void SetProfile(Profile* profile); | 104 void SetProfile(Profile* profile); |
107 Profile* profile() const { return profile_; } | 105 Profile* profile() const { return profile_; } |
108 | 106 |
109 // Returns the current TabContents. | 107 // Returns the current TabContents. |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 virtual ExtensionAction* GetPageAction(size_t index); | 182 virtual ExtensionAction* GetPageAction(size_t index); |
185 virtual ExtensionAction* GetVisiblePageAction(size_t index); | 183 virtual ExtensionAction* GetVisiblePageAction(size_t index); |
186 virtual void TestPageActionPressed(size_t index); | 184 virtual void TestPageActionPressed(size_t index); |
187 | 185 |
188 static const int kVertMargin; | 186 static const int kVertMargin; |
189 | 187 |
190 protected: | 188 protected: |
191 void Focus(); | 189 void Focus(); |
192 | 190 |
193 private: | 191 private: |
| 192 // SecurityImageView is used to display the appropriate status icon when the |
| 193 // current URL's scheme is https. |
| 194 class SecurityImageView : public views::ImageView { |
| 195 public: |
| 196 explicit SecurityImageView(const LocationBarView* parent); |
| 197 virtual ~SecurityImageView(); |
| 198 |
| 199 // Sets the image that should be displayed. |
| 200 void SetSecurityIcon(int resource_id); |
| 201 |
| 202 // Overridden from view. |
| 203 virtual bool OnMousePressed(const views::MouseEvent& event); |
| 204 |
| 205 private: |
| 206 // The owning LocationBarView. |
| 207 const LocationBarView* parent_; |
| 208 |
| 209 DISALLOW_COPY_AND_ASSIGN(SecurityImageView); |
| 210 }; |
| 211 |
194 // View used when the user has selected a keyword. | 212 // View used when the user has selected a keyword. |
195 // | 213 // |
196 // SelectedKeywordView maintains two labels. One label contains the | 214 // SelectedKeywordView maintains two labels. One label contains the |
197 // complete description of the keyword, the second contains a truncated | 215 // complete description of the keyword, the second contains a truncated |
198 // version of the description. The second is used if there is not enough room | 216 // version of the description. The second is used if there is not enough room |
199 // to display the complete description. | 217 // to display the complete description. |
200 class SelectedKeywordView : public views::View { | 218 class SelectedKeywordView : public views::View { |
201 public: | 219 public: |
202 explicit SelectedKeywordView(Profile* profile); | 220 explicit SelectedKeywordView(Profile* profile); |
203 virtual ~SelectedKeywordView(); | 221 virtual ~SelectedKeywordView(); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 views::Label trailing_label_; | 290 views::Label trailing_label_; |
273 | 291 |
274 // The keyword. | 292 // The keyword. |
275 std::wstring keyword_; | 293 std::wstring keyword_; |
276 | 294 |
277 Profile* profile_; | 295 Profile* profile_; |
278 | 296 |
279 DISALLOW_COPY_AND_ASSIGN(KeywordHintView); | 297 DISALLOW_COPY_AND_ASSIGN(KeywordHintView); |
280 }; | 298 }; |
281 | 299 |
282 class ShowInfoBubbleTask; | |
283 class ShowFirstRunBubbleTask; | |
284 | |
285 class LocationBarImageView : public views::ImageView, | |
286 public InfoBubbleDelegate { | |
287 public: | |
288 explicit LocationBarImageView(const BubblePositioner* bubble_positioner); | |
289 virtual ~LocationBarImageView(); | |
290 | |
291 // Overridden from view for the mouse hovering. | |
292 virtual void OnMouseMoved(const views::MouseEvent& event); | |
293 virtual void OnMouseExited(const views::MouseEvent& event); | |
294 virtual bool OnMousePressed(const views::MouseEvent& event) = 0; | |
295 | |
296 // InfoBubbleDelegate | |
297 void InfoBubbleClosing(InfoBubble* info_bubble, bool closed_by_escape); | |
298 bool CloseOnEscape() { return true; } | |
299 | |
300 virtual void ShowInfoBubble() = 0; | |
301 | |
302 protected: | |
303 void ShowInfoBubbleImpl(const std::wstring& text, SkColor text_color); | |
304 | |
305 private: | |
306 friend class ShowInfoBubbleTask; | |
307 | |
308 // The currently shown info bubble if any. | |
309 InfoBubble* info_bubble_; | |
310 | |
311 // A task used to display the info bubble when the mouse hovers on the | |
312 // image. | |
313 ShowInfoBubbleTask* show_info_bubble_task_; | |
314 | |
315 // A positioner used to give the info bubble the correct target bounds. The | |
316 // caller maintains ownership of this and must ensure it's kept alive. | |
317 const BubblePositioner* bubble_positioner_; | |
318 | |
319 DISALLOW_COPY_AND_ASSIGN(LocationBarImageView); | |
320 }; | |
321 | |
322 // SecurityImageView is used to display the lock or warning icon when the | |
323 // current URL's scheme is https. | |
324 // | |
325 // If a message has been set with SetInfoBubbleText, it displays an info | |
326 // bubble when the mouse hovers on the image. | |
327 class SecurityImageView : public LocationBarImageView { | |
328 public: | |
329 enum Image { | |
330 LOCK = 0, | |
331 WARNING | |
332 }; | |
333 | |
334 SecurityImageView(const LocationBarView* parent, | |
335 Profile* profile, | |
336 ToolbarModel* model_, | |
337 const BubblePositioner* bubble_positioner); | |
338 virtual ~SecurityImageView(); | |
339 | |
340 // Sets the image that should be displayed. | |
341 void SetImageShown(Image image); | |
342 | |
343 // Overridden from view for the mouse hovering. | |
344 virtual bool OnMousePressed(const views::MouseEvent& event); | |
345 | |
346 void set_profile(Profile* profile) { profile_ = profile; } | |
347 | |
348 virtual void ShowInfoBubble(); | |
349 | |
350 private: | |
351 // The lock icon shown when using HTTPS. | |
352 static SkBitmap* lock_icon_; | |
353 | |
354 // The warning icon shown when HTTPS is broken. | |
355 static SkBitmap* warning_icon_; | |
356 | |
357 // A task used to display the info bubble when the mouse hovers on the | |
358 // image. | |
359 ShowInfoBubbleTask* show_info_bubble_task_; | |
360 | |
361 // The owning LocationBarView. | |
362 const LocationBarView* parent_; | |
363 | |
364 Profile* profile_; | |
365 | |
366 ToolbarModel* model_; | |
367 | |
368 DISALLOW_COPY_AND_ASSIGN(SecurityImageView); | |
369 }; | |
370 | |
371 class ContentSettingImageView : public views::ImageView, | 300 class ContentSettingImageView : public views::ImageView, |
372 public InfoBubbleDelegate { | 301 public InfoBubbleDelegate { |
373 public: | 302 public: |
374 ContentSettingImageView(ContentSettingsType content_type, | 303 ContentSettingImageView(ContentSettingsType content_type, |
375 const LocationBarView* parent, | 304 const LocationBarView* parent, |
376 Profile* profile, | 305 Profile* profile, |
377 const BubblePositioner* bubble_positioner); | 306 const BubblePositioner* bubble_positioner); |
378 virtual ~ContentSettingImageView(); | 307 virtual ~ContentSettingImageView(); |
379 | 308 |
380 void set_profile(Profile* profile) { profile_ = profile; } | 309 void set_profile(Profile* profile) { profile_ = profile; } |
(...skipping 23 matching lines...) Expand all Loading... |
404 // A positioner used to give the info bubble the correct target bounds. The | 333 // A positioner used to give the info bubble the correct target bounds. The |
405 // caller maintains ownership of this and must ensure it's kept alive. | 334 // caller maintains ownership of this and must ensure it's kept alive. |
406 const BubblePositioner* bubble_positioner_; | 335 const BubblePositioner* bubble_positioner_; |
407 | 336 |
408 DISALLOW_IMPLICIT_CONSTRUCTORS(ContentSettingImageView); | 337 DISALLOW_IMPLICIT_CONSTRUCTORS(ContentSettingImageView); |
409 }; | 338 }; |
410 typedef std::vector<ContentSettingImageView*> ContentSettingViews; | 339 typedef std::vector<ContentSettingImageView*> ContentSettingViews; |
411 | 340 |
412 // PageActionImageView is used to display the icon for a given PageAction | 341 // PageActionImageView is used to display the icon for a given PageAction |
413 // and notify the extension when the icon is clicked. | 342 // and notify the extension when the icon is clicked. |
414 class PageActionImageView : public LocationBarImageView, | 343 class PageActionImageView : public views::ImageView, |
415 public ImageLoadingTracker::Observer, | 344 public ImageLoadingTracker::Observer, |
416 public ExtensionContextMenuModel::PopupDelegate, | 345 public ExtensionContextMenuModel::PopupDelegate, |
417 public ExtensionPopup::Observer { | 346 public ExtensionPopup::Observer { |
418 public: | 347 public: |
419 PageActionImageView(LocationBarView* owner, | 348 PageActionImageView(LocationBarView* owner, |
420 Profile* profile, | 349 Profile* profile, |
421 ExtensionAction* page_action, | 350 ExtensionAction* page_action); |
422 const BubblePositioner* bubble_positioner); | |
423 virtual ~PageActionImageView(); | 351 virtual ~PageActionImageView(); |
424 | 352 |
425 ExtensionAction* page_action() { return page_action_; } | 353 ExtensionAction* page_action() { return page_action_; } |
426 | 354 |
427 int current_tab_id() { return current_tab_id_; } | 355 int current_tab_id() { return current_tab_id_; } |
428 | 356 |
429 void set_preview_enabled(bool preview_enabled) { | 357 void set_preview_enabled(bool preview_enabled) { |
430 preview_enabled_ = preview_enabled; | 358 preview_enabled_ = preview_enabled; |
431 } | 359 } |
432 | 360 |
433 // Overridden from view. | 361 // Overridden from view. |
434 virtual void OnMouseMoved(const views::MouseEvent& event); | |
435 virtual bool OnMousePressed(const views::MouseEvent& event); | 362 virtual bool OnMousePressed(const views::MouseEvent& event); |
436 virtual void OnMouseReleased(const views::MouseEvent& event, bool canceled); | 363 virtual void OnMouseReleased(const views::MouseEvent& event, bool canceled); |
437 | 364 |
438 // Overridden from LocationBarImageView. | |
439 virtual void ShowInfoBubble(); | |
440 | |
441 // Overridden from ImageLoadingTracker. | 365 // Overridden from ImageLoadingTracker. |
442 virtual void OnImageLoaded( | 366 virtual void OnImageLoaded( |
443 SkBitmap* image, ExtensionResource resource, int index); | 367 SkBitmap* image, ExtensionResource resource, int index); |
444 | 368 |
445 // Overridden from ExtensionContextMenuModelModel::Delegate | 369 // Overridden from ExtensionContextMenuModelModel::Delegate |
446 virtual void InspectPopup(ExtensionAction* action); | 370 virtual void InspectPopup(ExtensionAction* action); |
447 | 371 |
448 // Overridden from ExtensionPopup::Observer | 372 // Overridden from ExtensionPopup::Observer |
449 virtual void ExtensionPopupClosed(ExtensionPopup* popup); | 373 virtual void ExtensionPopupClosed(ExtensionPopup* popup); |
450 | 374 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 // with preferred width |pref_width| at its preferred size. If this returns | 448 // with preferred width |pref_width| at its preferred size. If this returns |
525 // true, the preferred size should be used. If this returns false, the | 449 // true, the preferred size should be used. If this returns false, the |
526 // minimum size of the view should be used. | 450 // minimum size of the view should be used. |
527 bool UsePref(int pref_width, int available_width); | 451 bool UsePref(int pref_width, int available_width); |
528 | 452 |
529 // Returns true if the view needs to be resized. This determines whether the | 453 // Returns true if the view needs to be resized. This determines whether the |
530 // min or pref should be used, and returns true if the view is not at that | 454 // min or pref should be used, and returns true if the view is not at that |
531 // size. | 455 // size. |
532 bool NeedsResize(View* view, int available_width); | 456 bool NeedsResize(View* view, int available_width); |
533 | 457 |
534 // Adjusts the keyword hint, selected keyword and type to search views | 458 // Adjusts the keyword hint, selected keyword view, type to search label, and |
535 // based on the contents of the edit. Returns true if something changed that | 459 // security info label based on the contents of the edit. Returns true if |
536 // necessitates a layout. | 460 // something changed that necessitates a layout. |
537 bool AdjustHints(int available_width); | 461 bool AdjustAutocollapseViews(int available_width); |
538 | 462 |
539 // If View fits in the specified region, it is made visible and the | 463 // If View fits in the specified region, it is made visible and the |
540 // bounds are adjusted appropriately. If the View does not fit, it is | 464 // bounds are adjusted appropriately. If the View does not fit, it is |
541 // made invisible. | 465 // made invisible. |
542 void LayoutView(bool leading, views::View* view, int available_width, | 466 void LayoutView(bool leading, views::View* view, int available_width, |
543 gfx::Rect* bounds); | 467 gfx::Rect* bounds); |
544 | 468 |
545 // Sets the security icon to display. Note that no repaint is done. | |
546 void SetSecurityIcon(ToolbarModel::Icon icon); | |
547 | |
548 // Update the visibility state of the Content Blocked icons to reflect what is | 469 // Update the visibility state of the Content Blocked icons to reflect what is |
549 // actually blocked on the current page. | 470 // actually blocked on the current page. |
550 void RefreshContentSettingViews(); | 471 void RefreshContentSettingViews(); |
551 | 472 |
552 // Delete all page action views that we have created. | 473 // Delete all page action views that we have created. |
553 void DeletePageActionViews(); | 474 void DeletePageActionViews(); |
554 | 475 |
555 // Update the views for the Page Actions, to reflect state changes for | 476 // Update the views for the Page Actions, to reflect state changes for |
556 // PageActions. | 477 // PageActions. |
557 void RefreshPageActionViews(); | 478 void RefreshPageActionViews(); |
558 | 479 |
559 // Sets the text that should be displayed in the info label and its associated | |
560 // tooltip text. Call with an empty string if the info label should be | |
561 // hidden. | |
562 void SetInfoText(const std::wstring& text, | |
563 ToolbarModel::InfoTextType text_type, | |
564 const std::wstring& tooltip_text); | |
565 | |
566 // Sets the visibility of view to new_vis. Returns whether the visibility | 480 // Sets the visibility of view to new_vis. Returns whether the visibility |
567 // changed. | 481 // changed. |
568 bool ToggleVisibility(bool new_vis, views::View* view); | 482 bool ToggleVisibility(bool new_vis, views::View* view); |
569 | 483 |
570 #if defined(OS_WIN) | 484 #if defined(OS_WIN) |
571 // Helper for the Mouse event handlers that does all the real work. | 485 // Helper for the Mouse event handlers that does all the real work. |
572 void OnMouseEvent(const views::MouseEvent& event, UINT msg); | 486 void OnMouseEvent(const views::MouseEvent& event, UINT msg); |
573 #endif | 487 #endif |
574 | 488 |
575 // Helper to show the first run info bubble. | 489 // Helper to show the first run info bubble. |
(...skipping 27 matching lines...) Expand all Loading... |
603 | 517 |
604 // The user's desired disposition for how their input should be opened | 518 // The user's desired disposition for how their input should be opened |
605 WindowOpenDisposition disposition_; | 519 WindowOpenDisposition disposition_; |
606 | 520 |
607 // The transition type to use for the navigation | 521 // The transition type to use for the navigation |
608 PageTransition::Type transition_; | 522 PageTransition::Type transition_; |
609 | 523 |
610 // Font used by edit and some of the hints. | 524 // Font used by edit and some of the hints. |
611 gfx::Font font_; | 525 gfx::Font font_; |
612 | 526 |
| 527 // The view that shows the lock/warning when in HTTPS mode. |
| 528 SecurityImageView security_image_view_; |
| 529 |
613 // Location_entry view wrapper | 530 // Location_entry view wrapper |
614 views::NativeViewHost* location_entry_view_; | 531 views::NativeViewHost* location_entry_view_; |
615 | 532 |
616 // The following views are used to provide hints and remind the user as to | 533 // The following views are used to provide hints and remind the user as to |
617 // what is going in the edit. They are all added a children of the | 534 // what is going in the edit. They are all added a children of the |
618 // LocationBarView. At most one is visible at a time. Preference is | 535 // LocationBarView. At most one is visible at a time. Preference is |
619 // given to the keyword_view_, then hint_view_, then type_to_search_view_. | 536 // given to the keyword_view_, then hint_view_, then type_to_search_view_. |
| 537 // These, as well as |security_info_label_|, autocollapse when the edit needs |
| 538 // the room. |
620 | 539 |
621 // Shown if the user has selected a keyword. | 540 // Shown if the user has selected a keyword. |
622 SelectedKeywordView selected_keyword_view_; | 541 SelectedKeywordView selected_keyword_view_; |
623 | 542 |
624 // Shown if the selected url has a corresponding keyword. | 543 // Shown if the selected url has a corresponding keyword. |
625 KeywordHintView keyword_hint_view_; | 544 KeywordHintView keyword_hint_view_; |
626 | 545 |
627 // Shown if the text is not a keyword or url. | 546 // Shown if the text is not a keyword or url. |
628 views::Label type_to_search_view_; | 547 views::Label type_to_search_view_; |
629 | 548 |
630 // The view that shows the lock/warning when in HTTPS mode. | 549 // A label displayed on the right side of the box to show more information |
631 SecurityImageView security_image_view_; | 550 // about certain security states. |
| 551 views::Label security_info_label_; |
632 | 552 |
633 // The content setting views. | 553 // The content setting views. |
634 ContentSettingViews content_setting_views_; | 554 ContentSettingViews content_setting_views_; |
635 | 555 |
636 // The page action icon views. | 556 // The page action icon views. |
637 PageActionViews page_action_views_; | 557 PageActionViews page_action_views_; |
638 | 558 |
639 // A label displayed after the lock icon to show some extra information. | |
640 views::Label info_label_; | |
641 | |
642 // When true, the location bar view is read only and also is has a slightly | 559 // When true, the location bar view is read only and also is has a slightly |
643 // different presentation (font size / color). This is used for popups. | 560 // different presentation (font size / color). This is used for popups. |
644 bool popup_window_mode_; | 561 bool popup_window_mode_; |
645 | 562 |
646 // Used schedule a task for the first run info bubble. | 563 // Used schedule a task for the first run info bubble. |
647 ScopedRunnableMethodFactory<LocationBarView> first_run_bubble_; | 564 ScopedRunnableMethodFactory<LocationBarView> first_run_bubble_; |
648 | 565 |
649 // The positioner that places the omnibox and info bubbles. | 566 // The positioner that places the omnibox and info bubbles. |
650 const BubblePositioner* bubble_positioner_; | 567 const BubblePositioner* bubble_positioner_; |
651 | 568 |
652 // Storage of string needed for accessibility. | 569 // Storage of string needed for accessibility. |
653 std::wstring accessible_name_; | 570 std::wstring accessible_name_; |
654 | 571 |
655 DISALLOW_COPY_AND_ASSIGN(LocationBarView); | 572 DISALLOW_COPY_AND_ASSIGN(LocationBarView); |
656 }; | 573 }; |
657 | 574 |
658 #endif // CHROME_BROWSER_VIEWS_LOCATION_BAR_VIEW_H_ | 575 #endif // CHROME_BROWSER_VIEWS_LOCATION_BAR_VIEW_H_ |
OLD | NEW |