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

Side by Side Diff: chrome/browser/tabs/tab_finder.cc

Issue 9030010: Move most of the remaining users of WebContentsObserver::tab_contents() to use web_contents(). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 8 years, 12 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
« no previous file with comments | « chrome/browser/tabs/tab_finder.h ('k') | chrome/browser/translate/translate_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/tabs/tab_finder.h" 5 #include "chrome/browser/tabs/tab_finder.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 10 matching lines...) Expand all
21 #include "content/public/browser/notification_source.h" 21 #include "content/public/browser/notification_source.h"
22 #include "content/public/browser/notification_types.h" 22 #include "content/public/browser/notification_types.h"
23 #include "content/public/browser/web_contents_observer.h" 23 #include "content/public/browser/web_contents_observer.h"
24 #include "content/public/common/frame_navigate_params.h" 24 #include "content/public/common/frame_navigate_params.h"
25 #include "content/public/common/page_transition_types.h" 25 #include "content/public/common/page_transition_types.h"
26 26
27 using content::WebContents; 27 using content::WebContents;
28 28
29 class TabFinder::WebContentsObserverImpl : public content::WebContentsObserver { 29 class TabFinder::WebContentsObserverImpl : public content::WebContentsObserver {
30 public: 30 public:
31 WebContentsObserverImpl(TabContents* tab, TabFinder* finder); 31 WebContentsObserverImpl(WebContents* tab, TabFinder* finder);
32 virtual ~WebContentsObserverImpl(); 32 virtual ~WebContentsObserverImpl();
33 33
34 TabContents* tab_contents() { 34 WebContents* web_contents() {
35 return content::WebContentsObserver::tab_contents(); 35 return content::WebContentsObserver::web_contents();
36 } 36 }
37 37
38 // content::WebContentsObserver overrides: 38 // content::WebContentsObserver overrides:
39 virtual void DidNavigateAnyFrame( 39 virtual void DidNavigateAnyFrame(
40 const content::LoadCommittedDetails& details, 40 const content::LoadCommittedDetails& details,
41 const content::FrameNavigateParams& params) OVERRIDE; 41 const content::FrameNavigateParams& params) OVERRIDE;
42 virtual void WebContentsDestroyed(WebContents* tab) OVERRIDE; 42 virtual void WebContentsDestroyed(WebContents* tab) OVERRIDE;
43 43
44 private: 44 private:
45 TabFinder* finder_; 45 TabFinder* finder_;
46 46
47 DISALLOW_COPY_AND_ASSIGN(WebContentsObserverImpl); 47 DISALLOW_COPY_AND_ASSIGN(WebContentsObserverImpl);
48 }; 48 };
49 49
50 TabFinder::WebContentsObserverImpl::WebContentsObserverImpl( 50 TabFinder::WebContentsObserverImpl::WebContentsObserverImpl(
51 TabContents* tab, 51 WebContents* tab,
52 TabFinder* finder) 52 TabFinder* finder)
53 : content::WebContentsObserver(tab), 53 : content::WebContentsObserver(tab),
54 finder_(finder) { 54 finder_(finder) {
55 } 55 }
56 56
57 TabFinder::WebContentsObserverImpl::~WebContentsObserverImpl() { 57 TabFinder::WebContentsObserverImpl::~WebContentsObserverImpl() {
58 } 58 }
59 59
60 void TabFinder::WebContentsObserverImpl::DidNavigateAnyFrame( 60 void TabFinder::WebContentsObserverImpl::DidNavigateAnyFrame(
61 const content::LoadCommittedDetails& details, 61 const content::LoadCommittedDetails& details,
62 const content::FrameNavigateParams& params) { 62 const content::FrameNavigateParams& params) {
63 finder_->DidNavigateAnyFrame(tab_contents(), details, params); 63 finder_->DidNavigateAnyFrame(web_contents(), details, params);
64 } 64 }
65 65
66 void TabFinder::WebContentsObserverImpl::WebContentsDestroyed( 66 void TabFinder::WebContentsObserverImpl::WebContentsDestroyed(
67 WebContents* tab) { 67 WebContents* tab) {
68 finder_->TabDestroyed(this); 68 finder_->TabDestroyed(this);
69 delete this; 69 delete this;
70 } 70 }
71 71
72 // static 72 // static
73 TabFinder* TabFinder::GetInstance() { 73 TabFinder* TabFinder::GetInstance() {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 return NULL; 115 return NULL;
116 } 116 }
117 117
118 void TabFinder::Observe(int type, 118 void TabFinder::Observe(int type,
119 const content::NotificationSource& source, 119 const content::NotificationSource& source,
120 const content::NotificationDetails& details) { 120 const content::NotificationDetails& details) {
121 DCHECK_EQ(type, content::NOTIFICATION_TAB_PARENTED); 121 DCHECK_EQ(type, content::NOTIFICATION_TAB_PARENTED);
122 122
123 // The tab was added to a browser. Query for its state now. 123 // The tab was added to a browser. Query for its state now.
124 TabContentsWrapper* tab = content::Source<TabContentsWrapper>(source).ptr(); 124 TabContentsWrapper* tab = content::Source<TabContentsWrapper>(source).ptr();
125 TrackTab(tab->tab_contents()); 125 TrackTab(tab->web_contents());
126 } 126 }
127 127
128 TabFinder::TabFinder() { 128 TabFinder::TabFinder() {
129 registrar_.Add(this, content::NOTIFICATION_TAB_PARENTED, 129 registrar_.Add(this, content::NOTIFICATION_TAB_PARENTED,
130 content::NotificationService::AllSources()); 130 content::NotificationService::AllSources());
131 } 131 }
132 132
133 TabFinder::~TabFinder() { 133 TabFinder::~TabFinder() {
134 STLDeleteElements(&tab_contents_observers_); 134 STLDeleteElements(&tab_contents_observers_);
135 } 135 }
136 136
137 void TabFinder::DidNavigateAnyFrame( 137 void TabFinder::DidNavigateAnyFrame(
138 TabContents* source, 138 WebContents* source,
139 const content::LoadCommittedDetails& details, 139 const content::LoadCommittedDetails& details,
140 const content::FrameNavigateParams& params) { 140 const content::FrameNavigateParams& params) {
141 CancelRequestsFor(source); 141 CancelRequestsFor(source);
142 142
143 if (content::PageTransitionIsRedirect(params.transition)) { 143 if (content::PageTransitionIsRedirect(params.transition)) {
144 // If this is a redirect, we need to go to the db to get the start. 144 // If this is a redirect, we need to go to the db to get the start.
145 FetchRedirectStart(source); 145 FetchRedirectStart(source);
146 } else if (params.redirects.size() > 1 || 146 } else if (params.redirects.size() > 1 ||
147 params.redirects[0] != details.entry->GetURL()) { 147 params.redirects[0] != details.entry->GetURL()) {
148 tab_contents_to_url_[source] = params.redirects[0]; 148 web_contents_to_url_[source] = params.redirects[0];
149 } 149 }
150 } 150 }
151 151
152 bool TabFinder::TabMatchesURL(TabContents* tab_contents, const GURL& url) { 152 bool TabFinder::TabMatchesURL(WebContents* tab_contents, const GURL& url) {
153 if (tab_contents->GetURL() == url) 153 if (tab_contents->GetURL() == url)
154 return true; 154 return true;
155 155
156 TabContentsToURLMap::const_iterator i = 156 WebContentsToURLMap::const_iterator i =
157 tab_contents_to_url_.find(tab_contents); 157 web_contents_to_url_.find(tab_contents);
158 return i != tab_contents_to_url_.end() && i->second == url; 158 return i != web_contents_to_url_.end() && i->second == url;
159 } 159 }
160 160
161 TabContents* TabFinder::FindTabInBrowser(Browser* browser, const GURL& url) { 161 TabContents* TabFinder::FindTabInBrowser(Browser* browser, const GURL& url) {
162 if (!browser->is_type_tabbed()) 162 if (!browser->is_type_tabbed())
163 return NULL; 163 return NULL;
164 164
165 for (int i = 0; i < browser->tab_count(); ++i) { 165 for (int i = 0; i < browser->tab_count(); ++i) {
166 if (TabMatchesURL(browser->GetTabContentsAt(i), url)) 166 if (TabMatchesURL(browser->GetTabContentsAt(i), url))
167 return browser->GetTabContentsAt(i); 167 return browser->GetTabContentsAt(i);
168 } 168 }
169 return NULL; 169 return NULL;
170 } 170 }
171 171
172 void TabFinder::TrackTab(TabContents* tab) { 172 void TabFinder::TrackTab(WebContents* tab) {
173 for (WebContentsObservers::const_iterator i = tab_contents_observers_.begin(); 173 for (WebContentsObservers::const_iterator i = tab_contents_observers_.begin();
174 i != tab_contents_observers_.end(); ++i) { 174 i != tab_contents_observers_.end(); ++i) {
175 if ((*i)->tab_contents() == tab) { 175 if ((*i)->web_contents() == tab) {
176 // Already tracking the tab. 176 // Already tracking the tab.
177 return; 177 return;
178 } 178 }
179 } 179 }
180 WebContentsObserverImpl* observer = new WebContentsObserverImpl(tab, this); 180 WebContentsObserverImpl* observer = new WebContentsObserverImpl(tab, this);
181 tab_contents_observers_.insert(observer); 181 tab_contents_observers_.insert(observer);
182 FetchRedirectStart(tab); 182 FetchRedirectStart(tab);
183 } 183 }
184 184
185 void TabFinder::TabDestroyed(WebContentsObserverImpl* observer) { 185 void TabFinder::TabDestroyed(WebContentsObserverImpl* observer) {
186 DCHECK_GT(tab_contents_observers_.count(observer), 0u); 186 DCHECK_GT(tab_contents_observers_.count(observer), 0u);
187 tab_contents_observers_.erase(observer); 187 tab_contents_observers_.erase(observer);
188 } 188 }
189 189
190 void TabFinder::CancelRequestsFor(TabContents* tab_contents) { 190 void TabFinder::CancelRequestsFor(WebContents* web_contents) {
191 Profile* profile = 191 Profile* profile =
192 Profile::FromBrowserContext(tab_contents->GetBrowserContext()); 192 Profile::FromBrowserContext(web_contents->GetBrowserContext());
193 if (profile->IsOffTheRecord()) 193 if (profile->IsOffTheRecord())
194 return; 194 return;
195 195
196 tab_contents_to_url_.erase(tab_contents); 196 web_contents_to_url_.erase(web_contents);
197 197
198 HistoryService* history = profile->GetHistoryService( 198 HistoryService* history = profile->GetHistoryService(
199 Profile::EXPLICIT_ACCESS); 199 Profile::EXPLICIT_ACCESS);
200 if (history) { 200 if (history) {
201 CancelableRequestProvider::Handle request_handle; 201 CancelableRequestProvider::Handle request_handle;
202 if (callback_consumer_.GetFirstHandleForClientData(tab_contents, 202 if (callback_consumer_.GetFirstHandleForClientData(web_contents,
203 &request_handle)) { 203 &request_handle)) {
204 history->CancelRequest(request_handle); 204 history->CancelRequest(request_handle);
205 } 205 }
206 } 206 }
207 } 207 }
208 208
209 void TabFinder::FetchRedirectStart(TabContents* tab) { 209 void TabFinder::FetchRedirectStart(WebContents* tab) {
210 Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext()); 210 Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext());
211 if (profile->IsOffTheRecord()) 211 if (profile->IsOffTheRecord())
212 return; 212 return;
213 213
214 NavigationEntry* committed_entry = 214 NavigationEntry* committed_entry =
215 tab->GetController().GetLastCommittedEntry(); 215 tab->GetController().GetLastCommittedEntry();
216 if (!committed_entry || committed_entry->GetURL().is_empty()) 216 if (!committed_entry || committed_entry->GetURL().is_empty())
217 return; 217 return;
218 218
219 HistoryService* history = profile->GetHistoryService( 219 HistoryService* history = profile->GetHistoryService(
220 Profile::EXPLICIT_ACCESS); 220 Profile::EXPLICIT_ACCESS);
221 if (history) { 221 if (history) {
222 CancelableRequestProvider::Handle request_handle = 222 CancelableRequestProvider::Handle request_handle =
223 history->QueryRedirectsTo( 223 history->QueryRedirectsTo(
224 committed_entry->GetURL(), 224 committed_entry->GetURL(),
225 &callback_consumer_, 225 &callback_consumer_,
226 base::Bind(&TabFinder::QueryRedirectsToComplete, 226 base::Bind(&TabFinder::QueryRedirectsToComplete,
227 base::Unretained(this))); 227 base::Unretained(this)));
228 callback_consumer_.SetClientData(history, request_handle, tab); 228 callback_consumer_.SetClientData(history, request_handle, tab);
229 } 229 }
230 } 230 }
231 231
232 void TabFinder::QueryRedirectsToComplete(HistoryService::Handle handle, 232 void TabFinder::QueryRedirectsToComplete(HistoryService::Handle handle,
233 GURL url, 233 GURL url,
234 bool success, 234 bool success,
235 history::RedirectList* redirects) { 235 history::RedirectList* redirects) {
236 if (success && !redirects->empty()) { 236 if (success && !redirects->empty()) {
237 TabContents* tab_contents = 237 WebContents* web_contents =
238 callback_consumer_.GetClientDataForCurrentRequest(); 238 callback_consumer_.GetClientDataForCurrentRequest();
239 DCHECK(tab_contents); 239 DCHECK(web_contents);
240 tab_contents_to_url_[tab_contents] = redirects->back(); 240 web_contents_to_url_[web_contents] = redirects->back();
241 } 241 }
242 } 242 }
OLDNEW
« no previous file with comments | « chrome/browser/tabs/tab_finder.h ('k') | chrome/browser/translate/translate_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698