diff options
author | jstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-15 18:03:05 +0000 |
---|---|---|
committer | jstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-15 18:03:05 +0000 |
commit | f2cc738f20fbfadfeccca94eb84c0baac63da0bb (patch) | |
tree | fc6463e24e41574e1b335f0944953ef3efc33d6b /chrome/browser | |
parent | 1837c260a77fe90648bfd9f15d7173159e118a19 (diff) | |
download | chromium_src-f2cc738f20fbfadfeccca94eb84c0baac63da0bb.zip chromium_src-f2cc738f20fbfadfeccca94eb84c0baac63da0bb.tar.gz chromium_src-f2cc738f20fbfadfeccca94eb84c0baac63da0bb.tar.bz2 |
Indicate if window is closing in tabs.onRemoved callback
This adds a removeInfo object to the chrome.tabs.onRemoved callback that indicates if the tab's window is also closing.
BUG=56592
TEST=ExtensionApiTest
Review URL: http://codereview.chromium.org/3692004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62755 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
20 files changed, 62 insertions, 23 deletions
diff --git a/chrome/browser/aeropeek_manager.cc b/chrome/browser/aeropeek_manager.cc index a63d2b9..e10c3a1 100644 --- a/chrome/browser/aeropeek_manager.cc +++ b/chrome/browser/aeropeek_manager.cc @@ -1097,7 +1097,11 @@ void AeroPeekManager::TabInsertedAt(TabContents* contents, tab_list_.push_back(window); } -void AeroPeekManager::TabClosingAt(TabContents* contents, int index) { +void AeroPeekManager::TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index) { + // |tab_strip_model| is NULL when this is being called from TabDetachedAt + // below. // Delete the AeroPeekWindow object associated with this tab and all its // resources. (AeroPeekWindow::Destory() also removes this tab from the tab // list of Windows.) @@ -1115,7 +1119,7 @@ void AeroPeekManager::TabDetachedAt(TabContents* contents, int index) { // Chrome will call TabInsertedAt() when this tab is inserted to another // TabStrip. We will re-create an AeroPeekWindow object for this tab and // re-add it to the tab list there. - TabClosingAt(contents, index); + TabClosingAt(NULL, contents, index); } void AeroPeekManager::TabSelectedAt(TabContents* old_contents, diff --git a/chrome/browser/aeropeek_manager.h b/chrome/browser/aeropeek_manager.h index 3c2d0cb..104e57e 100644 --- a/chrome/browser/aeropeek_manager.h +++ b/chrome/browser/aeropeek_manager.h @@ -110,7 +110,9 @@ class AeroPeekManager : public TabStripModelObserver, virtual void TabInsertedAt(TabContents* contents, int index, bool foreground); - virtual void TabClosingAt(TabContents* contents, int index); + virtual void TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index); virtual void TabDetachedAt(TabContents* contents, int index); virtual void TabSelectedAt(TabContents* old_contents, TabContents* new_contents, diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index d4b5446..0c7bacd 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -2620,7 +2620,9 @@ void Browser::TabInsertedAt(TabContents* contents, Source<TabContents>(contents)); } -void Browser::TabClosingAt(TabContents* contents, int index) { +void Browser::TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index) { NotificationService::current()->Notify( NotificationType::TAB_CLOSING, Source<NavigationController>(&contents->controller()), diff --git a/chrome/browser/browser.h b/chrome/browser/browser.h index f757e62..31da162 100644 --- a/chrome/browser/browser.h +++ b/chrome/browser/browser.h @@ -697,7 +697,9 @@ class Browser : public TabHandlerDelegate, virtual void TabInsertedAt(TabContents* contents, int index, bool foreground); - virtual void TabClosingAt(TabContents* contents, int index); + virtual void TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index); virtual void TabDetachedAt(TabContents* contents, int index); virtual void TabDeselectedAt(TabContents* contents, int index); virtual void TabSelectedAt(TabContents* old_contents, diff --git a/chrome/browser/browser_browsertest.cc b/chrome/browser/browser_browsertest.cc index 2d18646..0e2aaf1 100644 --- a/chrome/browser/browser_browsertest.cc +++ b/chrome/browser/browser_browsertest.cc @@ -86,7 +86,9 @@ class MockTabStripModelObserver : public TabStripModelObserver { public: MockTabStripModelObserver() : closing_count_(0) {} - virtual void TabClosingAt(TabContents* contents, int index) { + virtual void TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index) { closing_count_++; } diff --git a/chrome/browser/chromeos/tab_closeable_state_watcher.cc b/chrome/browser/chromeos/tab_closeable_state_watcher.cc index f3e867b..9346e86 100644 --- a/chrome/browser/chromeos/tab_closeable_state_watcher.cc +++ b/chrome/browser/chromeos/tab_closeable_state_watcher.cc @@ -41,10 +41,9 @@ void TabCloseableStateWatcher::TabStripWatcher::TabInsertedAt( } void TabCloseableStateWatcher::TabStripWatcher::TabClosingAt( - TabContents* tab_contents, int index) { - TabStripModel* tabstrip = browser_->tabstrip_model(); + TabStripModel* tab_strip_model, TabContents* tab_contents, int index) { // Check if the last tab is closing. - if (tabstrip->count() == 1) + if (tab_strip_model->count() == 1) main_watcher_->OnTabStripChanged(browser_, true); } diff --git a/chrome/browser/chromeos/tab_closeable_state_watcher.h b/chrome/browser/chromeos/tab_closeable_state_watcher.h index 2620304..737cf46 100644 --- a/chrome/browser/chromeos/tab_closeable_state_watcher.h +++ b/chrome/browser/chromeos/tab_closeable_state_watcher.h @@ -116,7 +116,9 @@ class TabCloseableStateWatcher : public ::TabCloseableStateWatcher, // TabStripModelObserver implementation: virtual void TabInsertedAt(TabContents* contents, int index, bool foreground); - virtual void TabClosingAt(TabContents* contents, int index); + virtual void TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index); virtual void TabDetachedAt(TabContents* contents, int index); virtual void TabChangedAt(TabContents* contents, int index, TabChangeType change_type); diff --git a/chrome/browser/chromeos/wm_overview_controller.cc b/chrome/browser/chromeos/wm_overview_controller.cc index cc0087f..f4bf91d 100644 --- a/chrome/browser/chromeos/wm_overview_controller.cc +++ b/chrome/browser/chromeos/wm_overview_controller.cc @@ -74,7 +74,9 @@ class BrowserListener : public TabStripModelObserver { virtual void TabInsertedAt(TabContents* contents, int index, bool foreground); - virtual void TabClosingAt(TabContents* contents, int index) {} + virtual void TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index) {} virtual void TabDetachedAt(TabContents* contents, int index); virtual void TabMoved(TabContents* contents, int from_index, diff --git a/chrome/browser/cocoa/tab_strip_model_observer_bridge.h b/chrome/browser/cocoa/tab_strip_model_observer_bridge.h index 61810c2..f5b0619 100644 --- a/chrome/browser/cocoa/tab_strip_model_observer_bridge.h +++ b/chrome/browser/cocoa/tab_strip_model_observer_bridge.h @@ -27,7 +27,9 @@ class TabStripModelObserverBridge : public TabStripModelObserver { virtual void TabInsertedAt(TabContents* contents, int index, bool foreground); - virtual void TabClosingAt(TabContents* contents, int index); + virtual void TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index); virtual void TabDetachedAt(TabContents* contents, int index); virtual void TabSelectedAt(TabContents* old_contents, TabContents* new_contents, diff --git a/chrome/browser/cocoa/tab_strip_model_observer_bridge.mm b/chrome/browser/cocoa/tab_strip_model_observer_bridge.mm index d1135c9..fbe5616 100644 --- a/chrome/browser/cocoa/tab_strip_model_observer_bridge.mm +++ b/chrome/browser/cocoa/tab_strip_model_observer_bridge.mm @@ -31,7 +31,8 @@ void TabStripModelObserverBridge::TabInsertedAt(TabContents* contents, } } -void TabStripModelObserverBridge::TabClosingAt(TabContents* contents, +void TabStripModelObserverBridge::TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, int index) { if ([controller_ respondsToSelector: @selector(tabClosingWithContents:atIndex:)]) { diff --git a/chrome/browser/extensions/extension_browser_event_router.cc b/chrome/browser/extensions/extension_browser_event_router.cc index cef987a..6728c8d 100644 --- a/chrome/browser/extensions/extension_browser_event_router.cc +++ b/chrome/browser/extensions/extension_browser_event_router.cc @@ -299,13 +299,19 @@ void ExtensionBrowserEventRouter::TabDetachedAt(TabContents* contents, DispatchEvent(contents->profile(), events::kOnTabDetached, json_args); } -void ExtensionBrowserEventRouter::TabClosingAt(TabContents* contents, +void ExtensionBrowserEventRouter::TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, int index) { int tab_id = ExtensionTabUtil::GetTabId(contents); ListValue args; args.Append(Value::CreateIntegerValue(tab_id)); + DictionaryValue* object_args = new DictionaryValue(); + object_args->SetBoolean(tab_keys::kWindowClosing, + tab_strip_model->closing_all()); + args.Append(object_args); + std::string json_args; base::JSONWriter::Write(&args, false, &json_args); diff --git a/chrome/browser/extensions/extension_browser_event_router.h b/chrome/browser/extensions/extension_browser_event_router.h index a39da32..7cd2f99 100644 --- a/chrome/browser/extensions/extension_browser_event_router.h +++ b/chrome/browser/extensions/extension_browser_event_router.h @@ -60,7 +60,9 @@ class ExtensionBrowserEventRouter : public TabStripModelObserver, // TabStripModelObserver virtual void TabInsertedAt(TabContents* contents, int index, bool foreground); - virtual void TabClosingAt(TabContents* contents, int index); + virtual void TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index); virtual void TabDetachedAt(TabContents* contents, int index); virtual void TabSelectedAt(TabContents* old_contents, TabContents* new_contents, diff --git a/chrome/browser/extensions/extension_tabs_module_constants.cc b/chrome/browser/extensions/extension_tabs_module_constants.cc index c7c515b..9dc19b8 100644 --- a/chrome/browser/extensions/extension_tabs_module_constants.cc +++ b/chrome/browser/extensions/extension_tabs_module_constants.cc @@ -33,6 +33,7 @@ const char kTitleKey[] = "title"; const char kToIndexKey[] = "toIndex"; const char kTopKey[] = "top"; const char kUrlKey[] = "url"; +const char kWindowClosing[] = "isWindowClosing"; const char kWidthKey[] = "width"; const char kWindowIdKey[] = "windowId"; const char kWindowTypeKey[] = "type"; diff --git a/chrome/browser/extensions/extension_tabs_module_constants.h b/chrome/browser/extensions/extension_tabs_module_constants.h index 79bd9a4..7ae35b7 100644 --- a/chrome/browser/extensions/extension_tabs_module_constants.h +++ b/chrome/browser/extensions/extension_tabs_module_constants.h @@ -37,6 +37,7 @@ extern const char kTitleKey[]; extern const char kToIndexKey[]; extern const char kTopKey[]; extern const char kUrlKey[]; +extern const char kWindowClosing[]; extern const char kWidthKey[]; extern const char kWindowIdKey[]; extern const char kIncognitoKey[]; diff --git a/chrome/browser/tabs/default_tab_handler.cc b/chrome/browser/tabs/default_tab_handler.cc index dc3598b..e3968b7 100644 --- a/chrome/browser/tabs/default_tab_handler.cc +++ b/chrome/browser/tabs/default_tab_handler.cc @@ -145,8 +145,10 @@ void DefaultTabHandler::TabInsertedAt(TabContents* contents, delegate_->AsBrowser()->TabInsertedAt(contents, index, foreground); } -void DefaultTabHandler::TabClosingAt(TabContents* contents, int index) { - delegate_->AsBrowser()->TabClosingAt(contents, index); +void DefaultTabHandler::TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index) { + delegate_->AsBrowser()->TabClosingAt(tab_strip_model, contents, index); } void DefaultTabHandler::TabDetachedAt(TabContents* contents, int index) { diff --git a/chrome/browser/tabs/default_tab_handler.h b/chrome/browser/tabs/default_tab_handler.h index 8a2af16..f8e2fde 100644 --- a/chrome/browser/tabs/default_tab_handler.h +++ b/chrome/browser/tabs/default_tab_handler.h @@ -60,7 +60,9 @@ class DefaultTabHandler : public TabHandler, virtual void TabInsertedAt(TabContents* contents, int index, bool foreground); - virtual void TabClosingAt(TabContents* contents, int index); + virtual void TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index); virtual void TabDetachedAt(TabContents* contents, int index); virtual void TabDeselectedAt(TabContents* contents, int index); virtual void TabSelectedAt(TabContents* old_contents, diff --git a/chrome/browser/tabs/tab_strip_model.cc b/chrome/browser/tabs/tab_strip_model.cc index e06b3f3..bc9c796 100644 --- a/chrome/browser/tabs/tab_strip_model.cc +++ b/chrome/browser/tabs/tab_strip_model.cc @@ -858,7 +858,7 @@ void TabStripModel::InternalCloseTab(TabContents* contents, int index, bool create_historical_tabs) { FOR_EACH_OBSERVER(TabStripModelObserver, observers_, - TabClosingAt(contents, index)); + TabClosingAt(this, contents, index)); // Ask the delegate to save an entry for this tab in the historical tab // database if applicable. diff --git a/chrome/browser/tabs/tab_strip_model_observer.cc b/chrome/browser/tabs/tab_strip_model_observer.cc index fa2fe8b..af5f899 100644 --- a/chrome/browser/tabs/tab_strip_model_observer.cc +++ b/chrome/browser/tabs/tab_strip_model_observer.cc @@ -9,7 +9,9 @@ void TabStripModelObserver::TabInsertedAt(TabContents* contents, bool foreground) { } -void TabStripModelObserver::TabClosingAt(TabContents* contents, int index) { +void TabStripModelObserver::TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index) { } void TabStripModelObserver::TabDetachedAt(TabContents* contents, int index) { diff --git a/chrome/browser/tabs/tab_strip_model_observer.h b/chrome/browser/tabs/tab_strip_model_observer.h index 9a091ee..67a7ea3 100644 --- a/chrome/browser/tabs/tab_strip_model_observer.h +++ b/chrome/browser/tabs/tab_strip_model_observer.h @@ -7,6 +7,7 @@ #pragma once class TabContents; +class TabStripModel; //////////////////////////////////////////////////////////////////////////////// // @@ -45,8 +46,10 @@ class TabStripModelObserver { bool foreground); // The specified TabContents at |index| is being closed (and eventually - // destroyed). - virtual void TabClosingAt(TabContents* contents, int index); + // destroyed). |tab_strip_model| is the TabStripModel the tab was part of. + virtual void TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index); // The specified TabContents at |index| is being detached, perhaps to be // inserted in another TabStripModel. The implementer should take whatever diff --git a/chrome/browser/tabs/tab_strip_model_unittest.cc b/chrome/browser/tabs/tab_strip_model_unittest.cc index 6eee910..c85d80f 100644 --- a/chrome/browser/tabs/tab_strip_model_unittest.cc +++ b/chrome/browser/tabs/tab_strip_model_unittest.cc @@ -289,7 +289,9 @@ class MockTabStripModelObserver : public TabStripModelObserver { states_.push_back(s); } - virtual void TabClosingAt(TabContents* contents, int index) { + virtual void TabClosingAt(TabStripModel* tab_strip_model, + TabContents* contents, + int index) { states_.push_back(new State(contents, index, CLOSE)); } virtual void TabDetachedAt(TabContents* contents, int index) { |