Refactor ExtensionTabUtil-namespaced functions into their own file.
TEST=none; no functionality has changed.
Review URL: http://codereview.chromium.org/8037005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@102958 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc
index 9d8b3ab..fcfd0f5 100644
--- a/chrome/browser/automation/automation_provider.cc
+++ b/chrome/browser/automation/automation_provider.cc
@@ -48,7 +48,7 @@
#include "chrome/browser/extensions/extension_install_ui.h"
#include "chrome/browser/extensions/extension_message_service.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_toolbar_model.h"
#include "chrome/browser/extensions/user_script_master.h"
#include "chrome/browser/net/url_request_mock_util.h"
diff --git a/chrome/browser/automation/automation_provider_observers.cc b/chrome/browser/automation/automation_provider_observers.cc
index be65a44..facb9cd2 100644
--- a/chrome/browser/automation/automation_provider_observers.cc
+++ b/chrome/browser/automation/automation_provider_observers.cc
@@ -13,9 +13,9 @@
#include "base/file_util.h"
#include "base/json/json_writer.h"
#include "base/memory/scoped_ptr.h"
+#include "base/string_number_conversions.h"
#include "base/string_util.h"
#include "base/stringprintf.h"
-#include "base/string_number_conversions.h"
#include "base/threading/thread_restrictions.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
@@ -29,7 +29,7 @@
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_updater.h"
#include "chrome/browser/history/history_types.h"
#include "chrome/browser/history/top_sites.h"
@@ -2895,4 +2895,3 @@
NOTREACHED();
}
}
-
diff --git a/chrome/browser/extensions/browser_action_apitest.cc b/chrome/browser/extensions/browser_action_apitest.cc
index 4f0043b..5240aba 100644
--- a/chrome/browser/extensions/browser_action_apitest.cc
+++ b/chrome/browser/extensions/browser_action_apitest.cc
@@ -12,7 +12,7 @@
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_browser_event_router.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
diff --git a/chrome/browser/extensions/execute_code_in_tab_function.cc b/chrome/browser/extensions/execute_code_in_tab_function.cc
index 5c961959..e8645d9 100644
--- a/chrome/browser/extensions/execute_code_in_tab_function.cc
+++ b/chrome/browser/extensions/execute_code_in_tab_function.cc
@@ -7,6 +7,7 @@
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_tabs_module.h"
#include "chrome/browser/extensions/extension_tabs_module_constants.h"
#include "chrome/browser/extensions/file_reader.h"
@@ -18,11 +19,11 @@
#include "chrome/common/extensions/extension_error_utils.h"
#include "chrome/common/extensions/extension_file_util.h"
#include "chrome/common/extensions/extension_l10n_util.h"
-#include "chrome/common/extensions/extension_messages.h"
#include "chrome/common/extensions/extension_message_bundle.h"
+#include "chrome/common/extensions/extension_messages.h"
+#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/tab_contents/tab_contents.h"
-#include "content/browser/renderer_host/render_view_host.h"
#include "content/common/notification_service.h"
namespace keys = extension_tabs_module_constants;
diff --git a/chrome/browser/extensions/extension_browser_event_router.cc b/chrome/browser/extensions/extension_browser_event_router.cc
index b72f425..661cdb4 100644
--- a/chrome/browser/extensions/extension_browser_event_router.cc
+++ b/chrome/browser/extensions/extension_browser_event_router.cc
@@ -9,6 +9,7 @@
#include "chrome/browser/extensions/extension_event_names.h"
#include "chrome/browser/extensions/extension_event_router.h"
#include "chrome/browser/extensions/extension_page_actions_module_constants.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_tabs_module_constants.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tabs/tab_strip_model.h"
diff --git a/chrome/browser/extensions/extension_browsertests_misc.cc b/chrome/browser/extensions/extension_browsertests_misc.cc
index 6bfae44c..d4885c67 100644
--- a/chrome/browser/extensions/extension_browsertests_misc.cc
+++ b/chrome/browser/extensions/extension_browsertests_misc.cc
@@ -12,7 +12,7 @@
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_updater.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tabs/tab_strip_model.h"
diff --git a/chrome/browser/extensions/extension_context_menu_model.cc b/chrome/browser/extensions/extension_context_menu_model.cc
index fd9207b..ba9eb11 100644
--- a/chrome/browser/extensions/extension_context_menu_model.cc
+++ b/chrome/browser/extensions/extension_context_menu_model.cc
@@ -6,7 +6,7 @@
#include "base/utf_string_conversions.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/extensions/extension_cookies_helpers.cc b/chrome/browser/extensions/extension_cookies_helpers.cc
index 472e373..2e25e293 100644
--- a/chrome/browser/extensions/extension_cookies_helpers.cc
+++ b/chrome/browser/extensions/extension_cookies_helpers.cc
@@ -9,7 +9,7 @@
#include "base/logging.h"
#include "base/values.h"
#include "chrome/browser/extensions/extension_cookies_api_constants.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tabs/tab_strip_model.h"
#include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/extensions/extension_debugger_api.cc b/chrome/browser/extensions/extension_debugger_api.cc
index 5afef7c4..aeddcfc 100644
--- a/chrome/browser/extensions/extension_debugger_api.cc
+++ b/chrome/browser/extensions/extension_debugger_api.cc
@@ -16,15 +16,15 @@
#include "base/values.h"
#include "chrome/browser/extensions/extension_debugger_api_constants.h"
#include "chrome/browser/extensions/extension_event_router.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
+#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_error_utils.h"
#include "content/browser/debugger/devtools_client_host.h"
#include "content/browser/debugger/devtools_manager.h"
#include "content/browser/tab_contents/tab_contents.h"
-#include "chrome/common/chrome_notification_types.h"
#include "content/common/devtools_messages.h"
#include "content/common/notification_service.h"
diff --git a/chrome/browser/extensions/extension_devtools_bridge.cc b/chrome/browser/extensions/extension_devtools_bridge.cc
index ea0bf3d..8bcc452 100644
--- a/chrome/browser/extensions/extension_devtools_bridge.cc
+++ b/chrome/browser/extensions/extension_devtools_bridge.cc
@@ -12,7 +12,7 @@
#include "chrome/browser/extensions/extension_devtools_events.h"
#include "chrome/browser/extensions/extension_devtools_manager.h"
#include "chrome/browser/extensions/extension_event_router.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "content/browser/debugger/devtools_manager.h"
diff --git a/chrome/browser/extensions/extension_devtools_browsertests.cc b/chrome/browser/extensions/extension_devtools_browsertests.cc
index 4bd6823..9f220b71 100644
--- a/chrome/browser/extensions/extension_devtools_browsertests.cc
+++ b/chrome/browser/extensions/extension_devtools_browsertests.cc
@@ -9,7 +9,7 @@
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tabs/tab_strip_model.h"
#include "chrome/browser/ui/browser_list.h"
diff --git a/chrome/browser/extensions/extension_file_browser_private_api.cc b/chrome/browser/extensions/extension_file_browser_private_api.cc
index fc884e0..91f63a0 100644
--- a/chrome/browser/extensions/extension_file_browser_private_api.cc
+++ b/chrome/browser/extensions/extension_file_browser_private_api.cc
@@ -20,7 +20,7 @@
#include "chrome/browser/extensions/extension_function_dispatcher.h"
#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/file_manager_util.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/prefs/scoped_user_pref_update.h"
diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc
index 726ec71..3af8d58 100644
--- a/chrome/browser/extensions/extension_host.cc
+++ b/chrome/browser/extensions/extension_host.cc
@@ -13,7 +13,7 @@
#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_shutdown.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/file_select_helper.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/extensions/extension_infobar_module.cc b/chrome/browser/extensions/extension_infobar_module.cc
index 3b263b0..dea559f 100644
--- a/chrome/browser/extensions/extension_infobar_module.cc
+++ b/chrome/browser/extensions/extension_infobar_module.cc
@@ -10,7 +10,7 @@
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_infobar_delegate.h"
#include "chrome/browser/extensions/extension_infobar_module_constants.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_tabs_module_constants.h"
#include "chrome/browser/infobars/infobar_tab_helper.h"
#include "chrome/browser/tab_contents/confirm_infobar_delegate.h"
diff --git a/chrome/browser/extensions/extension_menu_manager.cc b/chrome/browser/extensions/extension_menu_manager.cc
index 8cc81c2..eb2038e 100644
--- a/chrome/browser/extensions/extension_menu_manager.cc
+++ b/chrome/browser/extensions/extension_menu_manager.cc
@@ -13,7 +13,7 @@
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/browser/extensions/extension_event_router.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/extensions/extension.h"
diff --git a/chrome/browser/extensions/extension_message_service.cc b/chrome/browser/extensions/extension_message_service.cc
index 1fe3455..e38f7ee 100644
--- a/chrome/browser/extensions/extension_message_service.cc
+++ b/chrome/browser/extensions/extension_message_service.cc
@@ -9,7 +9,7 @@
#include "base/stl_util.h"
#include "base/values.h"
#include "chrome/browser/extensions/extension_process_manager.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tab_contents/tab_util.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
diff --git a/chrome/browser/extensions/extension_page_actions_module.cc b/chrome/browser/extensions/extension_page_actions_module.cc
index bdd9c68..65d9cbbb 100644
--- a/chrome/browser/extensions/extension_page_actions_module.cc
+++ b/chrome/browser/extensions/extension_page_actions_module.cc
@@ -10,7 +10,7 @@
#include "chrome/browser/extensions/extension_page_actions_module_constants.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_tab_helper.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
diff --git a/chrome/browser/extensions/extension_processes_api.cc b/chrome/browser/extensions/extension_processes_api.cc
index 0daa174..d8794a5 100644
--- a/chrome/browser/extensions/extension_processes_api.cc
+++ b/chrome/browser/extensions/extension_processes_api.cc
@@ -14,7 +14,7 @@
#include "chrome/browser/extensions/extension_event_router.h"
#include "chrome/browser/extensions/extension_processes_api_constants.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_tabs_module_constants.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/task_manager/task_manager.h"
diff --git a/chrome/browser/extensions/extension_save_page_api.cc b/chrome/browser/extensions/extension_save_page_api.cc
index 2aee2cee..03093768 100644
--- a/chrome/browser/extensions/extension_save_page_api.cc
+++ b/chrome/browser/extensions/extension_save_page_api.cc
@@ -6,7 +6,7 @@
#include "base/file_util.h"
#include "chrome/browser/browser_process.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "content/browser/child_process_security_policy.h"
#include "content/browser/renderer_host/render_view_host.h"
diff --git a/chrome/browser/extensions/extension_sidebar_api.cc b/chrome/browser/extensions/extension_sidebar_api.cc
index e9a209d..0b7e176f 100644
--- a/chrome/browser/extensions/extension_sidebar_api.cc
+++ b/chrome/browser/extensions/extension_sidebar_api.cc
@@ -5,13 +5,13 @@
#include "chrome/browser/extensions/extension_sidebar_api.h"
#include "base/json/json_writer.h"
+#include "base/string16.h"
#include "base/string_number_conversions.h"
#include "base/string_util.h"
-#include "base/string16.h"
#include "base/values.h"
#include "chrome/browser/extensions/extension_event_router.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sidebar/sidebar_container.h"
#include "chrome/browser/sidebar/sidebar_manager.h"
diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc
new file mode 100644
index 0000000..6bf27d65
--- /dev/null
+++ b/chrome/browser/extensions/extension_tab_util.cc
@@ -0,0 +1,215 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/tabs/tab_strip_model.h"
+#include "content/browser/tab_contents/tab_contents.h"
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/sessions/restore_tab_helper.h"
+#include "chrome/browser/extensions/extension_tabs_module_constants.h"
+
+namespace keys = extension_tabs_module_constants;
+namespace errors = extension_manifest_errors;
+
+int ExtensionTabUtil::GetWindowId(const Browser* browser) {
+ return browser->session_id().id();
+}
+
+// TODO(sky): this function should really take a TabContentsWrapper.
+int ExtensionTabUtil::GetTabId(const TabContents* tab_contents) {
+ const TabContentsWrapper* tab =
+ TabContentsWrapper::GetCurrentWrapperForContents(tab_contents);
+ return tab ? tab->restore_tab_helper()->session_id().id() : -1;
+}
+
+std::string ExtensionTabUtil::GetTabStatusText(bool is_loading) {
+ return is_loading ? keys::kStatusValueLoading : keys::kStatusValueComplete;
+}
+
+// TODO(sky): this function should really take a TabContentsWrapper.
+int ExtensionTabUtil::GetWindowIdOfTab(const TabContents* tab_contents) {
+ const TabContentsWrapper* tab =
+ TabContentsWrapper::GetCurrentWrapperForContents(tab_contents);
+ return tab ? tab->restore_tab_helper()->window_id().id() : -1;
+}
+
+DictionaryValue* ExtensionTabUtil::CreateTabValue(
+ const TabContents* contents) {
+ // Find the tab strip and index of this guy.
+ TabStripModel* tab_strip = NULL;
+ int tab_index;
+ if (ExtensionTabUtil::GetTabStripModel(contents, &tab_strip, &tab_index))
+ return ExtensionTabUtil::CreateTabValue(contents, tab_strip, tab_index);
+
+ // Couldn't find it. This can happen if the tab is being dragged.
+ return ExtensionTabUtil::CreateTabValue(contents, NULL, -1);
+}
+
+ListValue* ExtensionTabUtil::CreateTabList(const Browser* browser) {
+ ListValue* tab_list = new ListValue();
+ TabStripModel* tab_strip = browser->tabstrip_model();
+ for (int i = 0; i < tab_strip->count(); ++i) {
+ tab_list->Append(ExtensionTabUtil::CreateTabValue(
+ tab_strip->GetTabContentsAt(i)->tab_contents(), tab_strip, i));
+ }
+
+ return tab_list;
+}
+
+DictionaryValue* ExtensionTabUtil::CreateTabValue(const TabContents* contents,
+ TabStripModel* tab_strip,
+ int tab_index) {
+ DictionaryValue* result = new DictionaryValue();
+ bool is_loading = contents->IsLoading();
+ result->SetInteger(keys::kIdKey, ExtensionTabUtil::GetTabId(contents));
+ result->SetInteger(keys::kIndexKey, tab_index);
+ result->SetInteger(keys::kWindowIdKey,
+ ExtensionTabUtil::GetWindowIdOfTab(contents));
+ result->SetString(keys::kUrlKey, contents->GetURL().spec());
+ result->SetString(keys::kStatusKey, GetTabStatusText(is_loading));
+ result->SetBoolean(keys::kSelectedKey,
+ tab_strip && tab_index == tab_strip->active_index());
+ result->SetBoolean(keys::kPinnedKey,
+ tab_strip && tab_strip->IsTabPinned(tab_index));
+ result->SetString(keys::kTitleKey, contents->GetTitle());
+ result->SetBoolean(keys::kIncognitoKey,
+ contents->browser_context()->IsOffTheRecord());
+
+ if (!is_loading) {
+ NavigationEntry* entry = contents->controller().GetActiveEntry();
+ if (entry) {
+ if (entry->favicon().is_valid())
+ result->SetString(keys::kFaviconUrlKey, entry->favicon().url().spec());
+ }
+ }
+
+ return result;
+}
+
+DictionaryValue* ExtensionTabUtil::CreateTabValueActive(
+ const TabContents* contents,
+ bool active) {
+ DictionaryValue* result = ExtensionTabUtil::CreateTabValue(contents);
+ result->SetBoolean(keys::kSelectedKey, active);
+ return result;
+}
+
+// Return the type name for a browser window type.
+static std::string GetWindowTypeText(const Browser* browser) {
+ if (browser->is_type_popup())
+ return keys::kWindowTypeValuePopup;
+ if (browser->is_type_panel())
+ return keys::kWindowTypeValuePanel;
+ if (browser->is_app())
+ return keys::kWindowTypeValueApp;
+ return keys::kWindowTypeValueNormal;
+}
+
+// if |populate| is true, each window gets a list property |tabs| which contains
+// fully populated tab objects.
+DictionaryValue* ExtensionTabUtil::CreateWindowValue(const Browser* browser,
+ bool populate_tabs) {
+ DCHECK(browser);
+ DCHECK(browser->window());
+ DictionaryValue* result = new DictionaryValue();
+ result->SetInteger(keys::kIdKey, ExtensionTabUtil::GetWindowId(browser));
+ result->SetBoolean(keys::kIncognitoKey,
+ browser->profile()->IsOffTheRecord());
+ result->SetBoolean(keys::kFocusedKey, browser->window()->IsActive());
+ gfx::Rect bounds;
+ if (browser->window()->IsMaximized() || browser->window()->IsFullscreen())
+ bounds = browser->window()->GetBounds();
+ else
+ bounds = browser->window()->GetRestoredBounds();
+
+ result->SetInteger(keys::kLeftKey, bounds.x());
+ result->SetInteger(keys::kTopKey, bounds.y());
+ result->SetInteger(keys::kWidthKey, bounds.width());
+ result->SetInteger(keys::kHeightKey, bounds.height());
+ result->SetString(keys::kWindowTypeKey, GetWindowTypeText(browser));
+
+ if (populate_tabs) {
+ result->Set(keys::kTabsKey, ExtensionTabUtil::CreateTabList(browser));
+ }
+
+ return result;
+}
+
+bool ExtensionTabUtil::GetTabStripModel(const TabContents* tab_contents,
+ TabStripModel** tab_strip_model,
+ int* tab_index) {
+ DCHECK(tab_contents);
+ DCHECK(tab_strip_model);
+ DCHECK(tab_index);
+
+ for (BrowserList::const_iterator it = BrowserList::begin();
+ it != BrowserList::end(); ++it) {
+ TabStripModel* tab_strip = (*it)->tabstrip_model();
+ int index = tab_strip->GetWrapperIndex(tab_contents);
+ if (index != -1) {
+ *tab_strip_model = tab_strip;
+ *tab_index = index;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool ExtensionTabUtil::GetDefaultTab(Browser* browser,
+ TabContentsWrapper** contents,
+ int* tab_id) {
+ DCHECK(browser);
+ DCHECK(contents);
+
+ *contents = browser->GetSelectedTabContentsWrapper();
+ if (*contents) {
+ if (tab_id)
+ *tab_id = ExtensionTabUtil::GetTabId((*contents)->tab_contents());
+ return true;
+ }
+
+ return false;
+}
+
+bool ExtensionTabUtil::GetTabById(int tab_id,
+ Profile* profile,
+ bool include_incognito,
+ Browser** browser,
+ TabStripModel** tab_strip,
+ TabContentsWrapper** contents,
+ int* tab_index) {
+ Profile* incognito_profile =
+ include_incognito && profile->HasOffTheRecordProfile() ?
+ profile->GetOffTheRecordProfile() : NULL;
+ for (BrowserList::const_iterator iter = BrowserList::begin();
+ iter != BrowserList::end(); ++iter) {
+ Browser* target_browser = *iter;
+ if (target_browser->profile() == profile ||
+ target_browser->profile() == incognito_profile) {
+ TabStripModel* target_tab_strip = target_browser->tabstrip_model();
+ for (int i = 0; i < target_tab_strip->count(); ++i) {
+ TabContentsWrapper* target_contents =
+ target_tab_strip->GetTabContentsAt(i);
+ if (target_contents->restore_tab_helper()->session_id().id() ==
+ tab_id) {
+ if (browser)
+ *browser = target_browser;
+ if (tab_strip)
+ *tab_strip = target_tab_strip;
+ if (contents)
+ *contents = target_contents;
+ if (tab_index)
+ *tab_index = i;
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
diff --git a/chrome/browser/extensions/extension_tab_util.h b/chrome/browser/extensions/extension_tab_util.h
new file mode 100644
index 0000000..5dfb36f
--- /dev/null
+++ b/chrome/browser/extensions/extension_tab_util.h
@@ -0,0 +1,60 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_TAB_UTIL_H__
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_TAB_UTIL_H__
+#pragma once
+
+#include <string>
+
+class Browser;
+class Profile;
+class TabContents;
+class TabContentsWrapper;
+class TabStripModel;
+
+namespace base {
+class DictionaryValue;
+class ListValue;
+}
+
+// Provides various utility functions that help manipulate tabs.
+class ExtensionTabUtil {
+ public:
+ static int GetWindowId(const Browser* browser);
+ static int GetTabId(const TabContents* tab_contents);
+ static bool GetTabIdFromArgument(const base::ListValue &args,
+ int argument_index,
+ int *tab_id, std::string* error_message);
+ static std::string GetTabStatusText(bool is_loading);
+ static int GetWindowIdOfTab(const TabContents* tab_contents);
+ static base::ListValue* CreateTabList(const Browser* browser);
+ static base::DictionaryValue* CreateTabValue(
+ const TabContents* tab_contents);
+ static base::DictionaryValue* CreateTabValue(const TabContents* tab_contents,
+ TabStripModel* tab_strip,
+ int tab_index);
+ // Create a tab value, overriding its kSelectedKey to the provided boolean.
+ static base::DictionaryValue* CreateTabValueActive(
+ const TabContents* tab_contents,
+ bool active);
+ static base::DictionaryValue* CreateWindowValue(const Browser* browser,
+ bool populate_tabs);
+ // Gets the |tab_strip_model| and |tab_index| for the given |tab_contents|.
+ static bool GetTabStripModel(const TabContents* tab_contents,
+ TabStripModel** tab_strip_model,
+ int* tab_index);
+ static bool GetDefaultTab(Browser* browser,
+ TabContentsWrapper** contents,
+ int* tab_id);
+ // Any out parameter (|browser|, |tab_strip|, |contents|, & |tab_index|) may
+ // be NULL and will not be set within the function.
+ static bool GetTabById(int tab_id, Profile* profile, bool incognito_enabled,
+ Browser** browser,
+ TabStripModel** tab_strip,
+ TabContentsWrapper** contents,
+ int* tab_index);
+};
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_TAB_UTIL_H__
diff --git a/chrome/browser/extensions/extension_tabs_module.cc b/chrome/browser/extensions/extension_tabs_module.cc
index 901029b..7367e77 100644
--- a/chrome/browser/extensions/extension_tabs_module.cc
+++ b/chrome/browser/extensions/extension_tabs_module.cc
@@ -17,6 +17,7 @@
#include "chrome/browser/extensions/extension_function_dispatcher.h"
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_tabs_module_constants.h"
#include "chrome/browser/net/url_fixer_upper.h"
#include "chrome/browser/prefs/incognito_mode_prefs.h"
@@ -119,17 +120,6 @@
return url;
}
-// Return the type name for a browser window type.
-std::string GetWindowTypeText(const Browser* browser) {
- if (browser->is_type_popup())
- return keys::kWindowTypeValuePopup;
- if (browser->is_type_panel())
- return keys::kWindowTypeValuePanel;
- if (browser->is_app())
- return keys::kWindowTypeValueApp;
- return keys::kWindowTypeValueNormal;
-}
-
bool IsCrashURL(const GURL& url) {
// Check a fixed-up URL, to normalize the scheme and parse hosts correctly.
GURL fixed_url =
@@ -141,193 +131,6 @@
} // namespace
-int ExtensionTabUtil::GetWindowId(const Browser* browser) {
- return browser->session_id().id();
-}
-
-// TODO(sky): this function should really take a TabContentsWrapper.
-int ExtensionTabUtil::GetTabId(const TabContents* tab_contents) {
- const TabContentsWrapper* tab =
- TabContentsWrapper::GetCurrentWrapperForContents(tab_contents);
- return tab ? tab->restore_tab_helper()->session_id().id() : -1;
-}
-
-std::string ExtensionTabUtil::GetTabStatusText(bool is_loading) {
- return is_loading ? keys::kStatusValueLoading : keys::kStatusValueComplete;
-}
-
-// TODO(sky): this function should really take a TabContentsWrapper.
-int ExtensionTabUtil::GetWindowIdOfTab(const TabContents* tab_contents) {
- const TabContentsWrapper* tab =
- TabContentsWrapper::GetCurrentWrapperForContents(tab_contents);
- return tab ? tab->restore_tab_helper()->window_id().id() : -1;
-}
-
-DictionaryValue* ExtensionTabUtil::CreateTabValue(
- const TabContents* contents) {
- // Find the tab strip and index of this guy.
- TabStripModel* tab_strip = NULL;
- int tab_index;
- if (ExtensionTabUtil::GetTabStripModel(contents, &tab_strip, &tab_index))
- return ExtensionTabUtil::CreateTabValue(contents, tab_strip, tab_index);
-
- // Couldn't find it. This can happen if the tab is being dragged.
- return ExtensionTabUtil::CreateTabValue(contents, NULL, -1);
-}
-
-ListValue* ExtensionTabUtil::CreateTabList(const Browser* browser) {
- ListValue* tab_list = new ListValue();
- TabStripModel* tab_strip = browser->tabstrip_model();
- for (int i = 0; i < tab_strip->count(); ++i) {
- tab_list->Append(ExtensionTabUtil::CreateTabValue(
- tab_strip->GetTabContentsAt(i)->tab_contents(), tab_strip, i));
- }
-
- return tab_list;
-}
-
-DictionaryValue* ExtensionTabUtil::CreateTabValue(const TabContents* contents,
- TabStripModel* tab_strip,
- int tab_index) {
- DictionaryValue* result = new DictionaryValue();
- bool is_loading = contents->IsLoading();
- result->SetInteger(keys::kIdKey, ExtensionTabUtil::GetTabId(contents));
- result->SetInteger(keys::kIndexKey, tab_index);
- result->SetInteger(keys::kWindowIdKey,
- ExtensionTabUtil::GetWindowIdOfTab(contents));
- result->SetString(keys::kUrlKey, contents->GetURL().spec());
- result->SetString(keys::kStatusKey, GetTabStatusText(is_loading));
- result->SetBoolean(keys::kSelectedKey,
- tab_strip && tab_index == tab_strip->active_index());
- result->SetBoolean(keys::kPinnedKey,
- tab_strip && tab_strip->IsTabPinned(tab_index));
- result->SetString(keys::kTitleKey, contents->GetTitle());
- result->SetBoolean(keys::kIncognitoKey,
- contents->browser_context()->IsOffTheRecord());
-
- if (!is_loading) {
- NavigationEntry* entry = contents->controller().GetActiveEntry();
- if (entry) {
- if (entry->favicon().is_valid())
- result->SetString(keys::kFaviconUrlKey, entry->favicon().url().spec());
- }
- }
-
- return result;
-}
-
-DictionaryValue* ExtensionTabUtil::CreateTabValueActive(
- const TabContents* contents,
- bool active) {
- DictionaryValue* result = ExtensionTabUtil::CreateTabValue(contents);
- result->SetBoolean(keys::kSelectedKey, active);
- return result;
-}
-
-// if |populate| is true, each window gets a list property |tabs| which contains
-// fully populated tab objects.
-DictionaryValue* ExtensionTabUtil::CreateWindowValue(const Browser* browser,
- bool populate_tabs) {
- DCHECK(browser);
- DCHECK(browser->window());
- DictionaryValue* result = new DictionaryValue();
- result->SetInteger(keys::kIdKey, ExtensionTabUtil::GetWindowId(browser));
- result->SetBoolean(keys::kIncognitoKey,
- browser->profile()->IsOffTheRecord());
- result->SetBoolean(keys::kFocusedKey, browser->window()->IsActive());
- gfx::Rect bounds;
- if (browser->window()->IsMaximized() || browser->window()->IsFullscreen())
- bounds = browser->window()->GetBounds();
- else
- bounds = browser->window()->GetRestoredBounds();
-
- result->SetInteger(keys::kLeftKey, bounds.x());
- result->SetInteger(keys::kTopKey, bounds.y());
- result->SetInteger(keys::kWidthKey, bounds.width());
- result->SetInteger(keys::kHeightKey, bounds.height());
- result->SetString(keys::kWindowTypeKey, GetWindowTypeText(browser));
-
- if (populate_tabs) {
- result->Set(keys::kTabsKey, ExtensionTabUtil::CreateTabList(browser));
- }
-
- return result;
-}
-
-bool ExtensionTabUtil::GetTabStripModel(const TabContents* tab_contents,
- TabStripModel** tab_strip_model,
- int* tab_index) {
- DCHECK(tab_contents);
- DCHECK(tab_strip_model);
- DCHECK(tab_index);
-
- for (BrowserList::const_iterator it = BrowserList::begin();
- it != BrowserList::end(); ++it) {
- TabStripModel* tab_strip = (*it)->tabstrip_model();
- int index = tab_strip->GetWrapperIndex(tab_contents);
- if (index != -1) {
- *tab_strip_model = tab_strip;
- *tab_index = index;
- return true;
- }
- }
-
- return false;
-}
-
-bool ExtensionTabUtil::GetDefaultTab(Browser* browser,
- TabContentsWrapper** contents,
- int* tab_id) {
- DCHECK(browser);
- DCHECK(contents);
-
- *contents = browser->GetSelectedTabContentsWrapper();
- if (*contents) {
- if (tab_id)
- *tab_id = ExtensionTabUtil::GetTabId((*contents)->tab_contents());
- return true;
- }
-
- return false;
-}
-
-bool ExtensionTabUtil::GetTabById(int tab_id,
- Profile* profile,
- bool include_incognito,
- Browser** browser,
- TabStripModel** tab_strip,
- TabContentsWrapper** contents,
- int* tab_index) {
- Profile* incognito_profile =
- include_incognito && profile->HasOffTheRecordProfile() ?
- profile->GetOffTheRecordProfile() : NULL;
- for (BrowserList::const_iterator iter = BrowserList::begin();
- iter != BrowserList::end(); ++iter) {
- Browser* target_browser = *iter;
- if (target_browser->profile() == profile ||
- target_browser->profile() == incognito_profile) {
- TabStripModel* target_tab_strip = target_browser->tabstrip_model();
- for (int i = 0; i < target_tab_strip->count(); ++i) {
- TabContentsWrapper* target_contents =
- target_tab_strip->GetTabContentsAt(i);
- if (target_contents->restore_tab_helper()->session_id().id() ==
- tab_id) {
- if (browser)
- *browser = target_browser;
- if (tab_strip)
- *tab_strip = target_tab_strip;
- if (contents)
- *contents = target_contents;
- if (tab_index)
- *tab_index = i;
- return true;
- }
- }
- }
- }
- return false;
-}
-
// Windows ---------------------------------------------------------------------
bool GetWindowFunction::RunImpl() {
diff --git a/chrome/browser/extensions/extension_tabs_module.h b/chrome/browser/extensions/extension_tabs_module.h
index 0dd8e3be..a248c47 100644
--- a/chrome/browser/extensions/extension_tabs_module.h
+++ b/chrome/browser/extensions/extension_tabs_module.h
@@ -15,47 +15,7 @@
#include "content/common/notification_registrar.h"
class BackingStore;
-class Browser;
class SkBitmap;
-class TabContents;
-class TabContentsWrapper;
-class TabStripModel;
-
-namespace base {
-class DictionaryValue;
-class ListValue;
-}
-
-namespace ExtensionTabUtil {
-int GetWindowId(const Browser* browser);
-int GetTabId(const TabContents* tab_contents);
-std::string GetTabStatusText(bool is_loading);
-int GetWindowIdOfTab(const TabContents* tab_contents);
-base::ListValue* CreateTabList(const Browser* browser);
-base::DictionaryValue* CreateTabValue(const TabContents* tab_contents);
-base::DictionaryValue* CreateTabValue(const TabContents* tab_contents,
- TabStripModel* tab_strip,
- int tab_index);
-// Create a tab value, overriding its kSelectedKey to the provided boolean.
-base::DictionaryValue* CreateTabValueActive(const TabContents* tab_contents,
- bool active);
-base::DictionaryValue* CreateWindowValue(const Browser* browser,
- bool populate_tabs);
-// Gets the |tab_strip_model| and |tab_index| for the given |tab_contents|.
-bool GetTabStripModel(const TabContents* tab_contents,
- TabStripModel** tab_strip_model,
- int* tab_index);
-bool GetDefaultTab(Browser* browser,
- TabContentsWrapper** contents,
- int* tab_id);
-// Any out parameter (|browser|, |tab_strip|, |contents|, & |tab_index|) may
-// be NULL and will not be set within the function.
-bool GetTabById(int tab_id, Profile* profile, bool incognito_enabled,
- Browser** browser,
- TabStripModel** tab_strip,
- TabContentsWrapper** contents,
- int* tab_index);
-}
// Windows
class GetWindowFunction : public SyncExtensionFunction {
diff --git a/chrome/browser/extensions/extension_webnavigation_api.cc b/chrome/browser/extensions/extension_webnavigation_api.cc
index 84c00747..66643ee 100644
--- a/chrome/browser/extensions/extension_webnavigation_api.cc
+++ b/chrome/browser/extensions/extension_webnavigation_api.cc
@@ -12,7 +12,7 @@
#include "base/time.h"
#include "base/values.h"
#include "chrome/browser/extensions/extension_event_router.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_webnavigation_api_constants.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
diff --git a/chrome/browser/extensions/page_action_apitest.cc b/chrome/browser/extensions/page_action_apitest.cc
index 4ee3be1..3cb8f09c 100644
--- a/chrome/browser/extensions/page_action_apitest.cc
+++ b/chrome/browser/extensions/page_action_apitest.cc
@@ -4,16 +4,16 @@
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_browser_event_router.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sessions/restore_tab_helper.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/omnibox/location_bar.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
-#include "chrome/common/extensions/extension_action.h"
#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_action.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/browser/tab_contents/tab_contents.h"
diff --git a/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm b/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm
index 3d8b1a0..55a0c86 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm
@@ -7,7 +7,7 @@
#include "base/sys_string_conversions.h"
#include "base/task.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_uninstall_dialog.h"
#include "chrome/browser/prefs/pref_change_registrar.h"
#include "chrome/browser/prefs/pref_service.h"
diff --git a/chrome/browser/ui/cocoa/location_bar/page_action_decoration.mm b/chrome/browser/ui/cocoa/location_bar/page_action_decoration.mm
index 22a86e4..40425f19 100644
--- a/chrome/browser/ui/cocoa/location_bar/page_action_decoration.mm
+++ b/chrome/browser/ui/cocoa/location_bar/page_action_decoration.mm
@@ -9,6 +9,7 @@
#include "base/sys_string_conversions.h"
#include "chrome/browser/extensions/extension_browser_event_router.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#import "chrome/browser/ui/cocoa/extensions/extension_action_context_menu.h"
#import "chrome/browser/ui/cocoa/extensions/extension_popup_controller.h"
diff --git a/chrome/browser/ui/gtk/location_bar_view_gtk.cc b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
index 1775503b..1a4e3d4 100644
--- a/chrome/browser/ui/gtk/location_bar_view_gtk.cc
+++ b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
@@ -22,7 +22,7 @@
#include "chrome/browser/defaults.h"
#include "chrome/browser/extensions/extension_browser_event_router.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tabs_module.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/favicon/favicon_tab_helper.h"
#include "chrome/browser/instant/instant_controller.h"
#include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/ui/views/location_bar/page_action_image_view.cc b/chrome/browser/ui/views/location_bar/page_action_image_view.cc
index a7fa6f03..395720a5 100644
--- a/chrome/browser/ui/views/location_bar/page_action_image_view.cc
+++ b/chrome/browser/ui/views/location_bar/page_action_image_view.cc
@@ -7,6 +7,7 @@
#include "base/utf_string_conversions.h"
#include "chrome/browser/extensions/extension_browser_event_router.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_list.h"
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 8076c8a..72232ac8 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1113,6 +1113,8 @@
'browser/extensions/extension_tab_helper.h',
'browser/extensions/extension_tab_id_map.cc',
'browser/extensions/extension_tab_id_map.h',
+ 'browser/extensions/extension_tab_util.cc',
+ 'browser/extensions/extension_tab_util.h',
'browser/extensions/extension_tabs_module.cc',
'browser/extensions/extension_tabs_module.h',
'browser/extensions/extension_tabs_module_constants.cc',