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

Side by Side Diff: chrome/browser/ui/tabs/tab_strip_model.cc

Issue 562603002: Move PageTransition from //content/public/common to //ui/base (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 3 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
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/tabs/tab_strip_model.h" 5 #include "chrome/browser/ui/tabs/tab_strip_model.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 10
(...skipping 18 matching lines...) Expand all
29 using base::UserMetricsAction; 29 using base::UserMetricsAction;
30 using content::WebContents; 30 using content::WebContents;
31 31
32 namespace { 32 namespace {
33 33
34 // Returns true if the specified transition is one of the types that cause the 34 // Returns true if the specified transition is one of the types that cause the
35 // opener relationships for the tab in which the transition occurred to be 35 // opener relationships for the tab in which the transition occurred to be
36 // forgotten. This is generally any navigation that isn't a link click (i.e. 36 // forgotten. This is generally any navigation that isn't a link click (i.e.
37 // any navigation that can be considered to be the start of a new task distinct 37 // any navigation that can be considered to be the start of a new task distinct
38 // from what had previously occurred in that tab). 38 // from what had previously occurred in that tab).
39 bool ShouldForgetOpenersForTransition(content::PageTransition transition) { 39 bool ShouldForgetOpenersForTransition(ui::PageTransition transition) {
40 return transition == content::PAGE_TRANSITION_TYPED || 40 return transition == ui::PAGE_TRANSITION_TYPED ||
41 transition == content::PAGE_TRANSITION_AUTO_BOOKMARK || 41 transition == ui::PAGE_TRANSITION_AUTO_BOOKMARK ||
42 transition == content::PAGE_TRANSITION_GENERATED || 42 transition == ui::PAGE_TRANSITION_GENERATED ||
43 transition == content::PAGE_TRANSITION_KEYWORD || 43 transition == ui::PAGE_TRANSITION_KEYWORD ||
44 transition == content::PAGE_TRANSITION_AUTO_TOPLEVEL; 44 transition == ui::PAGE_TRANSITION_AUTO_TOPLEVEL;
45 } 45 }
46 46
47 // CloseTracker is used when closing a set of WebContents. It listens for 47 // CloseTracker is used when closing a set of WebContents. It listens for
48 // deletions of the WebContents and removes from the internal set any time one 48 // deletions of the WebContents and removes from the internal set any time one
49 // is deleted. 49 // is deleted.
50 class CloseTracker { 50 class CloseTracker {
51 public: 51 public:
52 typedef std::vector<WebContents*> Contents; 52 typedef std::vector<WebContents*> Contents;
53 53
54 explicit CloseTracker(const Contents& contents); 54 explicit CloseTracker(const Contents& contents);
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 DCHECK(ContainsIndex(start_index)); 598 DCHECK(ContainsIndex(start_index));
599 599
600 for (int i = contents_data_.size() - 1; i > start_index; --i) { 600 for (int i = contents_data_.size() - 1; i > start_index; --i) {
601 if (contents_data_[i]->opener() == opener) 601 if (contents_data_[i]->opener() == opener)
602 return i; 602 return i;
603 } 603 }
604 return kNoTab; 604 return kNoTab;
605 } 605 }
606 606
607 void TabStripModel::TabNavigating(WebContents* contents, 607 void TabStripModel::TabNavigating(WebContents* contents,
608 content::PageTransition transition) { 608 ui::PageTransition transition) {
609 if (ShouldForgetOpenersForTransition(transition)) { 609 if (ShouldForgetOpenersForTransition(transition)) {
610 // Don't forget the openers if this tab is a New Tab page opened at the 610 // Don't forget the openers if this tab is a New Tab page opened at the
611 // end of the TabStrip (e.g. by pressing Ctrl+T). Give the user one 611 // end of the TabStrip (e.g. by pressing Ctrl+T). Give the user one
612 // navigation of one of these transition types before resetting the 612 // navigation of one of these transition types before resetting the
613 // opener relationships (this allows for the use case of opening a new 613 // opener relationships (this allows for the use case of opening a new
614 // tab to do a quick look-up of something while viewing a tab earlier in 614 // tab to do a quick look-up of something while viewing a tab earlier in
615 // the strip). We can make this heuristic more permissive if need be. 615 // the strip). We can make this heuristic more permissive if need be.
616 if (!IsNewTabAtEndOfTabStrip(contents)) { 616 if (!IsNewTabAtEndOfTabStrip(contents)) {
617 // If the user navigates the current tab to another page in any way 617 // If the user navigates the current tab to another page in any way
618 // other than by clicking a link, we want to pro-actively forget all 618 // other than by clicking a link, we want to pro-actively forget all
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 } 776 }
777 777
778 void TabStripModel::SetSelectionFromModel( 778 void TabStripModel::SetSelectionFromModel(
779 const ui::ListSelectionModel& source) { 779 const ui::ListSelectionModel& source) {
780 DCHECK_NE(ui::ListSelectionModel::kUnselectedIndex, source.active()); 780 DCHECK_NE(ui::ListSelectionModel::kUnselectedIndex, source.active());
781 SetSelection(source, NOTIFY_DEFAULT); 781 SetSelection(source, NOTIFY_DEFAULT);
782 } 782 }
783 783
784 void TabStripModel::AddWebContents(WebContents* contents, 784 void TabStripModel::AddWebContents(WebContents* contents,
785 int index, 785 int index,
786 content::PageTransition transition, 786 ui::PageTransition transition,
787 int add_types) { 787 int add_types) {
788 // If the newly-opened tab is part of the same task as the parent tab, we want 788 // If the newly-opened tab is part of the same task as the parent tab, we want
789 // to inherit the parent's "group" attribute, so that if this tab is then 789 // to inherit the parent's "group" attribute, so that if this tab is then
790 // closed we'll jump back to the parent tab. 790 // closed we'll jump back to the parent tab.
791 bool inherit_group = (add_types & ADD_INHERIT_GROUP) == ADD_INHERIT_GROUP; 791 bool inherit_group = (add_types & ADD_INHERIT_GROUP) == ADD_INHERIT_GROUP;
792 792
793 if (transition == content::PAGE_TRANSITION_LINK && 793 if (transition == ui::PAGE_TRANSITION_LINK &&
794 (add_types & ADD_FORCE_INDEX) == 0) { 794 (add_types & ADD_FORCE_INDEX) == 0) {
795 // We assume tabs opened via link clicks are part of the same task as their 795 // We assume tabs opened via link clicks are part of the same task as their
796 // parent. Note that when |force_index| is true (e.g. when the user 796 // parent. Note that when |force_index| is true (e.g. when the user
797 // drag-and-drops a link to the tab strip), callers aren't really handling 797 // drag-and-drops a link to the tab strip), callers aren't really handling
798 // link clicks, they just want to score the navigation like a link click in 798 // link clicks, they just want to score the navigation like a link click in
799 // the history backend, so we don't inherit the group in this case. 799 // the history backend, so we don't inherit the group in this case.
800 index = order_controller_->DetermineInsertionIndex(transition, 800 index = order_controller_->DetermineInsertionIndex(transition,
801 add_types & ADD_ACTIVE); 801 add_types & ADD_ACTIVE);
802 inherit_group = true; 802 inherit_group = true;
803 } else { 803 } else {
804 // For all other types, respect what was passed to us, normalizing -1s and 804 // For all other types, respect what was passed to us, normalizing -1s and
805 // values that are too large. 805 // values that are too large.
806 if (index < 0 || index > count()) 806 if (index < 0 || index > count())
807 index = count(); 807 index = count();
808 } 808 }
809 809
810 if (transition == content::PAGE_TRANSITION_TYPED && index == count()) { 810 if (transition == ui::PAGE_TRANSITION_TYPED && index == count()) {
811 // Also, any tab opened at the end of the TabStrip with a "TYPED" 811 // Also, any tab opened at the end of the TabStrip with a "TYPED"
812 // transition inherit group as well. This covers the cases where the user 812 // transition inherit group as well. This covers the cases where the user
813 // creates a New Tab (e.g. Ctrl+T, or clicks the New Tab button), or types 813 // creates a New Tab (e.g. Ctrl+T, or clicks the New Tab button), or types
814 // in the address bar and presses Alt+Enter. This allows for opening a new 814 // in the address bar and presses Alt+Enter. This allows for opening a new
815 // Tab to quickly look up something. When this Tab is closed, the old one 815 // Tab to quickly look up something. When this Tab is closed, the old one
816 // is re-selected, not the next-adjacent. 816 // is re-selected, not the next-adjacent.
817 inherit_group = true; 817 inherit_group = true;
818 } 818 }
819 InsertWebContentsAt(index, contents, 819 InsertWebContentsAt(index, contents,
820 add_types | (inherit_group ? ADD_INHERIT_GROUP : 0)); 820 add_types | (inherit_group ? ADD_INHERIT_GROUP : 0));
821 // Reset the index, just in case insert ended up moving it on us. 821 // Reset the index, just in case insert ended up moving it on us.
822 index = GetIndexOfWebContents(contents); 822 index = GetIndexOfWebContents(contents);
823 823
824 if (inherit_group && transition == content::PAGE_TRANSITION_TYPED) 824 if (inherit_group && transition == ui::PAGE_TRANSITION_TYPED)
825 contents_data_[index]->set_reset_group_on_select(true); 825 contents_data_[index]->set_reset_group_on_select(true);
826 826
827 // TODO(sky): figure out why this is here and not in InsertWebContentsAt. When 827 // TODO(sky): figure out why this is here and not in InsertWebContentsAt. When
828 // here we seem to get failures in startup perf tests. 828 // here we seem to get failures in startup perf tests.
829 // Ensure that the new WebContentsView begins at the same size as the 829 // Ensure that the new WebContentsView begins at the same size as the
830 // previous WebContentsView if it existed. Otherwise, the initial WebKit 830 // previous WebContentsView if it existed. Otherwise, the initial WebKit
831 // layout will be performed based on a width of 0 pixels, causing a 831 // layout will be performed based on a width of 0 pixels, causing a
832 // very long, narrow, inaccurate layout. Because some scripts on pages (as 832 // very long, narrow, inaccurate layout. Because some scripts on pages (as
833 // well as WebKit's anchor link location calculation) are run on the 833 // well as WebKit's anchor link location calculation) are run on the
834 // initial layout and not recalculated later, we need to ensure the first 834 // initial layout and not recalculated later, we need to ensure the first
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after
1405 void TabStripModel::ForgetOpenersAndGroupsReferencing( 1405 void TabStripModel::ForgetOpenersAndGroupsReferencing(
1406 const WebContents* tab) { 1406 const WebContents* tab) {
1407 for (WebContentsDataVector::const_iterator i = contents_data_.begin(); 1407 for (WebContentsDataVector::const_iterator i = contents_data_.begin();
1408 i != contents_data_.end(); ++i) { 1408 i != contents_data_.end(); ++i) {
1409 if ((*i)->group() == tab) 1409 if ((*i)->group() == tab)
1410 (*i)->set_group(NULL); 1410 (*i)->set_group(NULL);
1411 if ((*i)->opener() == tab) 1411 if ((*i)->opener() == tab)
1412 (*i)->set_opener(NULL); 1412 (*i)->set_opener(NULL);
1413 } 1413 }
1414 } 1414 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/tabs/tab_strip_model.h ('k') | chrome/browser/ui/tabs/tab_strip_model_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698