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

Side by Side Diff: chrome/browser/ui/unload_controller.cc

Issue 17382005: Unbreak tabs.onRemove extension API in face of fast tab closure Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Don't modify content Created 7 years, 6 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
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/unload_controller.h" 5 #include "chrome/browser/ui/unload_controller.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "chrome/browser/ui/browser.h" 9 #include "chrome/browser/ui/browser.h"
10 #include "chrome/browser/ui/browser_tabstrip.h" 10 #include "chrome/browser/ui/browser_tabstrip.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 //////////////////////////////////////////////////////////////////////////////// 155 ////////////////////////////////////////////////////////////////////////////////
156 // UnloadController, TabStripModelObserver implementation: 156 // UnloadController, TabStripModelObserver implementation:
157 157
158 void UnloadController::TabInsertedAt(content::WebContents* contents, 158 void UnloadController::TabInsertedAt(content::WebContents* contents,
159 int index, 159 int index,
160 bool foreground) { 160 bool foreground) {
161 TabAttachedImpl(contents); 161 TabAttachedImpl(contents);
162 } 162 }
163 163
164 void UnloadController::TabDetachedAt(content::WebContents* contents, 164 void UnloadController::TabDetachedAt(content::WebContents* contents,
165 int index) { 165 int index,
166 bool closing_all) {
166 TabDetachedImpl(contents); 167 TabDetachedImpl(contents);
167 } 168 }
168 169
169 void UnloadController::TabReplacedAt(TabStripModel* tab_strip_model, 170 void UnloadController::TabReplacedAt(TabStripModel* tab_strip_model,
170 content::WebContents* old_contents, 171 content::WebContents* old_contents,
171 content::WebContents* new_contents, 172 content::WebContents* new_contents,
172 int index) { 173 int index) {
173 TabDetachedImpl(old_contents); 174 TabDetachedImpl(old_contents);
174 TabAttachedImpl(new_contents); 175 TabAttachedImpl(new_contents);
175 } 176 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 215
215 if (is_attempting_to_close_browser_) 216 if (is_attempting_to_close_browser_)
216 ClearUnloadState(contents); 217 ClearUnloadState(contents);
217 } 218 }
218 219
219 bool UnloadController::DetachWebContents(content::WebContents* contents) { 220 bool UnloadController::DetachWebContents(content::WebContents* contents) {
220 int index = browser_->tab_strip_model()->GetIndexOfWebContents(contents); 221 int index = browser_->tab_strip_model()->GetIndexOfWebContents(contents);
221 if (index != TabStripModel::kNoTab && 222 if (index != TabStripModel::kNoTab &&
222 contents->NeedToFireBeforeUnload()) { 223 contents->NeedToFireBeforeUnload()) {
223 tabs_needing_unload_ack_.insert(contents); 224 tabs_needing_unload_ack_.insert(contents);
225 CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(contents);
226 core_tab_helper->OnUnloadAboutToDetach();
224 browser_->tab_strip_model()->DetachWebContentsAt(index); 227 browser_->tab_strip_model()->DetachWebContentsAt(index);
225 contents->SetDelegate(detached_delegate_.get()); 228 contents->SetDelegate(detached_delegate_.get());
226 CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(contents);
227 core_tab_helper->OnUnloadDetachedStarted(); 229 core_tab_helper->OnUnloadDetachedStarted();
228 return true; 230 return true;
229 } 231 }
230 return false; 232 return false;
231 } 233 }
232 234
233 void UnloadController::ProcessPendingTabs() { 235 void UnloadController::ProcessPendingTabs() {
234 if (!is_attempting_to_close_browser_) { 236 if (!is_attempting_to_close_browser_) {
235 // Because we might invoke this after a delay it's possible for the value of 237 // Because we might invoke this after a delay it's possible for the value of
236 // is_attempting_to_close_browser_ to have changed since we scheduled the 238 // is_attempting_to_close_browser_ to have changed since we scheduled the
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 } 371 }
370 372
371 void UnloadController::PostTaskForProcessPendingTabs() { 373 void UnloadController::PostTaskForProcessPendingTabs() {
372 base::MessageLoop::current()->PostTask( 374 base::MessageLoop::current()->PostTask(
373 FROM_HERE, 375 FROM_HERE,
374 base::Bind(&UnloadController::ProcessPendingTabs, 376 base::Bind(&UnloadController::ProcessPendingTabs,
375 weak_factory_.GetWeakPtr())); 377 weak_factory_.GetWeakPtr()));
376 } 378 }
377 379
378 } // namespace chrome 380 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698