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

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

Issue 257153003: We have a problem in the process on destroying WebContentsImpl because (Closed) Base URL: https://git.chromium.org/chromium/src.git@master
Patch Set: Rebased onto origin/master again, resolved conflicts Created 6 years, 7 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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 DeletionObserver(CloseTracker* parent, WebContents* web_contents) 66 DeletionObserver(CloseTracker* parent, WebContents* web_contents)
67 : WebContentsObserver(web_contents), 67 : WebContentsObserver(web_contents),
68 parent_(parent) { 68 parent_(parent) {
69 } 69 }
70 70
71 // Expose web_contents() publicly. 71 // Expose web_contents() publicly.
72 using content::WebContentsObserver::web_contents; 72 using content::WebContentsObserver::web_contents;
73 73
74 private: 74 private:
75 // WebContentsObserver: 75 // WebContentsObserver:
76 virtual void WebContentsDestroyed(WebContents* web_contents) OVERRIDE { 76 virtual void WebContentsDestroyed() OVERRIDE {
77 parent_->OnWebContentsDestroyed(this); 77 parent_->OnWebContentsDestroyed(this);
78 } 78 }
79 79
80 CloseTracker* parent_; 80 CloseTracker* parent_;
81 81
82 DISALLOW_COPY_AND_ASSIGN(DeletionObserver); 82 DISALLOW_COPY_AND_ASSIGN(DeletionObserver);
83 }; 83 };
84 84
85 void OnWebContentsDestroyed(DeletionObserver* observer); 85 void OnWebContentsDestroyed(DeletionObserver* observer);
86 86
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 bool pinned() const { return pinned_; } 154 bool pinned() const { return pinned_; }
155 void set_pinned(bool value) { pinned_ = value; } 155 void set_pinned(bool value) { pinned_ = value; }
156 bool blocked() const { return blocked_; } 156 bool blocked() const { return blocked_; }
157 void set_blocked(bool value) { blocked_ = value; } 157 void set_blocked(bool value) { blocked_ = value; }
158 bool discarded() const { return discarded_; } 158 bool discarded() const { return discarded_; }
159 void set_discarded(bool value) { discarded_ = value; } 159 void set_discarded(bool value) { discarded_ = value; }
160 160
161 private: 161 private:
162 // Make sure that if someone deletes this WebContents out from under us, it 162 // Make sure that if someone deletes this WebContents out from under us, it
163 // is properly removed from the tab strip. 163 // is properly removed from the tab strip.
164 virtual void WebContentsDestroyed(WebContents* web_contents) OVERRIDE; 164 virtual void WebContentsDestroyed() OVERRIDE;
165 165
166 // The WebContents being tracked by this WebContentsData. The 166 // The WebContents being tracked by this WebContentsData. The
167 // WebContentsObserver does keep a reference, but when the WebContents is 167 // WebContentsObserver does keep a reference, but when the WebContents is
168 // deleted, the WebContentsObserver reference is NULLed and thus inaccessible. 168 // deleted, the WebContentsObserver reference is NULLed and thus inaccessible.
169 WebContents* contents_; 169 WebContents* contents_;
170 170
171 // The TabStripModel containing this WebContents. 171 // The TabStripModel containing this WebContents.
172 TabStripModel* tab_strip_model_; 172 TabStripModel* tab_strip_model_;
173 173
174 // The group is used to model a set of tabs spawned from a single parent 174 // The group is used to model a set of tabs spawned from a single parent
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 pinned_(false), 217 pinned_(false),
218 blocked_(false), 218 blocked_(false),
219 discarded_(false) { 219 discarded_(false) {
220 } 220 }
221 221
222 void TabStripModel::WebContentsData::SetWebContents(WebContents* contents) { 222 void TabStripModel::WebContentsData::SetWebContents(WebContents* contents) {
223 contents_ = contents; 223 contents_ = contents;
224 Observe(contents); 224 Observe(contents);
225 } 225 }
226 226
227 void TabStripModel::WebContentsData::WebContentsDestroyed( 227 void TabStripModel::WebContentsData::WebContentsDestroyed() {
228 WebContents* web_contents) { 228 DCHECK_EQ(contents_, web_contents());
229 DCHECK_EQ(contents_, web_contents);
230 229
231 // Note that we only detach the contents here, not close it - it's 230 // Note that we only detach the contents here, not close it - it's
232 // already been closed. We just want to undo our bookkeeping. 231 // already been closed. We just want to undo our bookkeeping.
233 int index = tab_strip_model_->GetIndexOfWebContents(web_contents); 232 int index = tab_strip_model_->GetIndexOfWebContents(web_contents());
234 DCHECK_NE(TabStripModel::kNoTab, index); 233 DCHECK_NE(TabStripModel::kNoTab, index);
235 tab_strip_model_->DetachWebContentsAt(index); 234 tab_strip_model_->DetachWebContentsAt(index);
236 } 235 }
237 236
238 /////////////////////////////////////////////////////////////////////////////// 237 ///////////////////////////////////////////////////////////////////////////////
239 // TabStripModel, public: 238 // TabStripModel, public:
240 239
241 TabStripModel::TabStripModel(TabStripModelDelegate* delegate, Profile* profile) 240 TabStripModel::TabStripModel(TabStripModelDelegate* delegate, Profile* profile)
242 : delegate_(delegate), 241 : delegate_(delegate),
243 profile_(profile), 242 profile_(profile),
(...skipping 1163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 void TabStripModel::ForgetOpenersAndGroupsReferencing( 1406 void TabStripModel::ForgetOpenersAndGroupsReferencing(
1408 const WebContents* tab) { 1407 const WebContents* tab) {
1409 for (WebContentsDataVector::const_iterator i = contents_data_.begin(); 1408 for (WebContentsDataVector::const_iterator i = contents_data_.begin();
1410 i != contents_data_.end(); ++i) { 1409 i != contents_data_.end(); ++i) {
1411 if ((*i)->group() == tab) 1410 if ((*i)->group() == tab)
1412 (*i)->set_group(NULL); 1411 (*i)->set_group(NULL);
1413 if ((*i)->opener() == tab) 1412 if ((*i)->opener() == tab)
1414 (*i)->set_opener(NULL); 1413 (*i)->set_opener(NULL);
1415 } 1414 }
1416 } 1415 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/tab_contents/core_tab_helper.cc ('k') | chrome/browser/ui/tabs/tab_strip_model_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698