| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/extensions/extension_tabs_module.h" | 5 #include "chrome/browser/extensions/extension_tabs_module.h" |
| 6 | 6 |
| 7 #include "base/base64.h" | 7 #include "base/base64.h" |
| 8 #include "base/string_number_conversions.h" |
| 8 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 9 #include "chrome/browser/browser.h" | 10 #include "chrome/browser/browser.h" |
| 10 #include "chrome/browser/browser_list.h" | 11 #include "chrome/browser/browser_list.h" |
| 11 #include "chrome/browser/browser_window.h" | 12 #include "chrome/browser/browser_window.h" |
| 12 #include "chrome/browser/extensions/extension_function_dispatcher.h" | 13 #include "chrome/browser/extensions/extension_function_dispatcher.h" |
| 13 #include "chrome/browser/extensions/extension_host.h" | 14 #include "chrome/browser/extensions/extension_host.h" |
| 14 #include "chrome/browser/extensions/extension_infobar_delegate.h" | 15 #include "chrome/browser/extensions/extension_infobar_delegate.h" |
| 15 #include "chrome/browser/extensions/extension_tabs_module_constants.h" | 16 #include "chrome/browser/extensions/extension_tabs_module_constants.h" |
| 16 #include "chrome/browser/extensions/extensions_service.h" | 17 #include "chrome/browser/extensions/extensions_service.h" |
| 17 #include "chrome/browser/profile.h" | 18 #include "chrome/browser/profile.h" |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 // Windows --------------------------------------------------------------------- | 217 // Windows --------------------------------------------------------------------- |
| 217 | 218 |
| 218 bool GetWindowFunction::RunImpl() { | 219 bool GetWindowFunction::RunImpl() { |
| 219 int window_id; | 220 int window_id; |
| 220 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &window_id)); | 221 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &window_id)); |
| 221 | 222 |
| 222 Browser* browser = GetBrowserInProfileWithId(profile(), window_id, | 223 Browser* browser = GetBrowserInProfileWithId(profile(), window_id, |
| 223 include_incognito(), &error_); | 224 include_incognito(), &error_); |
| 224 if (!browser || !browser->window()) { | 225 if (!browser || !browser->window()) { |
| 225 error_ = ExtensionErrorUtils::FormatErrorMessage( | 226 error_ = ExtensionErrorUtils::FormatErrorMessage( |
| 226 keys::kWindowNotFoundError, IntToString(window_id)); | 227 keys::kWindowNotFoundError, base::IntToString(window_id)); |
| 227 return false; | 228 return false; |
| 228 } | 229 } |
| 229 | 230 |
| 230 result_.reset(ExtensionTabUtil::CreateWindowValue(browser, false)); | 231 result_.reset(ExtensionTabUtil::CreateWindowValue(browser, false)); |
| 231 return true; | 232 return true; |
| 232 } | 233 } |
| 233 | 234 |
| 234 bool GetCurrentWindowFunction::RunImpl() { | 235 bool GetCurrentWindowFunction::RunImpl() { |
| 235 Browser* browser = GetCurrentBrowser(); | 236 Browser* browser = GetCurrentBrowser(); |
| 236 if (!browser || !browser->window()) { | 237 if (!browser || !browser->window()) { |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 bool UpdateWindowFunction::RunImpl() { | 390 bool UpdateWindowFunction::RunImpl() { |
| 390 int window_id; | 391 int window_id; |
| 391 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &window_id)); | 392 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &window_id)); |
| 392 DictionaryValue* update_props; | 393 DictionaryValue* update_props; |
| 393 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &update_props)); | 394 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &update_props)); |
| 394 | 395 |
| 395 Browser* browser = GetBrowserInProfileWithId(profile(), window_id, | 396 Browser* browser = GetBrowserInProfileWithId(profile(), window_id, |
| 396 include_incognito(), &error_); | 397 include_incognito(), &error_); |
| 397 if (!browser || !browser->window()) { | 398 if (!browser || !browser->window()) { |
| 398 error_ = ExtensionErrorUtils::FormatErrorMessage( | 399 error_ = ExtensionErrorUtils::FormatErrorMessage( |
| 399 keys::kWindowNotFoundError, IntToString(window_id)); | 400 keys::kWindowNotFoundError, base::IntToString(window_id)); |
| 400 return false; | 401 return false; |
| 401 } | 402 } |
| 402 | 403 |
| 403 gfx::Rect bounds = browser->window()->GetRestoredBounds(); | 404 gfx::Rect bounds = browser->window()->GetRestoredBounds(); |
| 404 // Any part of the bounds can optionally be set by the caller. | 405 // Any part of the bounds can optionally be set by the caller. |
| 405 int bounds_val; | 406 int bounds_val; |
| 406 if (update_props->HasKey(keys::kLeftKey)) { | 407 if (update_props->HasKey(keys::kLeftKey)) { |
| 407 EXTENSION_FUNCTION_VALIDATE(update_props->GetInteger( | 408 EXTENSION_FUNCTION_VALIDATE(update_props->GetInteger( |
| 408 keys::kLeftKey, | 409 keys::kLeftKey, |
| 409 &bounds_val)); | 410 &bounds_val)); |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 return false; | 740 return false; |
| 740 } | 741 } |
| 741 | 742 |
| 742 // If windowId is different from the current window, move between windows. | 743 // If windowId is different from the current window, move between windows. |
| 743 if (ExtensionTabUtil::GetWindowId(target_browser) != | 744 if (ExtensionTabUtil::GetWindowId(target_browser) != |
| 744 ExtensionTabUtil::GetWindowId(source_browser)) { | 745 ExtensionTabUtil::GetWindowId(source_browser)) { |
| 745 TabStripModel* target_tab_strip = target_browser->tabstrip_model(); | 746 TabStripModel* target_tab_strip = target_browser->tabstrip_model(); |
| 746 contents = source_tab_strip->DetachTabContentsAt(tab_index); | 747 contents = source_tab_strip->DetachTabContentsAt(tab_index); |
| 747 if (!contents) { | 748 if (!contents) { |
| 748 error_ = ExtensionErrorUtils::FormatErrorMessage( | 749 error_ = ExtensionErrorUtils::FormatErrorMessage( |
| 749 keys::kTabNotFoundError, IntToString(tab_id)); | 750 keys::kTabNotFoundError, base::IntToString(tab_id)); |
| 750 return false; | 751 return false; |
| 751 } | 752 } |
| 752 | 753 |
| 753 // Clamp move location to the last position. | 754 // Clamp move location to the last position. |
| 754 // This is ">" because it can append to a new index position. | 755 // This is ">" because it can append to a new index position. |
| 755 if (new_index > target_tab_strip->count()) | 756 if (new_index > target_tab_strip->count()) |
| 756 new_index = target_tab_strip->count(); | 757 new_index = target_tab_strip->count(); |
| 757 | 758 |
| 758 target_tab_strip->InsertTabContentsAt(new_index, contents, | 759 target_tab_strip->InsertTabContentsAt(new_index, contents, |
| 759 TabStripModel::ADD_NONE); | 760 TabStripModel::ADD_NONE); |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1053 for (BrowserList::const_iterator browser = BrowserList::begin(); | 1054 for (BrowserList::const_iterator browser = BrowserList::begin(); |
| 1054 browser != BrowserList::end(); ++browser) { | 1055 browser != BrowserList::end(); ++browser) { |
| 1055 if (((*browser)->profile() == profile || | 1056 if (((*browser)->profile() == profile || |
| 1056 (*browser)->profile() == incognito_profile) && | 1057 (*browser)->profile() == incognito_profile) && |
| 1057 ExtensionTabUtil::GetWindowId(*browser) == window_id) | 1058 ExtensionTabUtil::GetWindowId(*browser) == window_id) |
| 1058 return *browser; | 1059 return *browser; |
| 1059 } | 1060 } |
| 1060 | 1061 |
| 1061 if (error_message) | 1062 if (error_message) |
| 1062 *error_message = ExtensionErrorUtils::FormatErrorMessage( | 1063 *error_message = ExtensionErrorUtils::FormatErrorMessage( |
| 1063 keys::kWindowNotFoundError, IntToString(window_id)); | 1064 keys::kWindowNotFoundError, base::IntToString(window_id)); |
| 1064 | 1065 |
| 1065 return NULL; | 1066 return NULL; |
| 1066 } | 1067 } |
| 1067 | 1068 |
| 1068 static bool GetTabById(int tab_id, Profile* profile, | 1069 static bool GetTabById(int tab_id, Profile* profile, |
| 1069 bool include_incognito, | 1070 bool include_incognito, |
| 1070 Browser** browser, | 1071 Browser** browser, |
| 1071 TabStripModel** tab_strip, | 1072 TabStripModel** tab_strip, |
| 1072 TabContents** contents, | 1073 TabContents** contents, |
| 1073 int* tab_index, | 1074 int* tab_index, |
| 1074 std::string* error_message) { | 1075 std::string* error_message) { |
| 1075 if (ExtensionTabUtil::GetTabById(tab_id, profile, include_incognito, | 1076 if (ExtensionTabUtil::GetTabById(tab_id, profile, include_incognito, |
| 1076 browser, tab_strip, contents, tab_index)) | 1077 browser, tab_strip, contents, tab_index)) |
| 1077 return true; | 1078 return true; |
| 1078 | 1079 |
| 1079 if (error_message) | 1080 if (error_message) |
| 1080 *error_message = ExtensionErrorUtils::FormatErrorMessage( | 1081 *error_message = ExtensionErrorUtils::FormatErrorMessage( |
| 1081 keys::kTabNotFoundError, IntToString(tab_id)); | 1082 keys::kTabNotFoundError, base::IntToString(tab_id)); |
| 1082 | 1083 |
| 1083 return false; | 1084 return false; |
| 1084 } | 1085 } |
| 1085 | 1086 |
| 1086 static std::string GetWindowTypeText(Browser::Type type) { | 1087 static std::string GetWindowTypeText(Browser::Type type) { |
| 1087 // Note: for app popups, we report "app". | 1088 // Note: for app popups, we report "app". |
| 1088 if ((type & Browser::TYPE_APP) != 0 || type == Browser::TYPE_EXTENSION_APP) | 1089 if ((type & Browser::TYPE_APP) != 0 || type == Browser::TYPE_EXTENSION_APP) |
| 1089 return keys::kWindowTypeValueApp; | 1090 return keys::kWindowTypeValueApp; |
| 1090 if ((type & Browser::TYPE_POPUP) != 0) | 1091 if ((type & Browser::TYPE_POPUP) != 0) |
| 1091 return keys::kWindowTypeValuePopup; | 1092 return keys::kWindowTypeValuePopup; |
| 1092 | 1093 |
| 1093 DCHECK(type == Browser::TYPE_NORMAL); | 1094 DCHECK(type == Browser::TYPE_NORMAL); |
| 1094 return keys::kWindowTypeValueNormal; | 1095 return keys::kWindowTypeValueNormal; |
| 1095 } | 1096 } |
| 1096 | 1097 |
| 1097 static GURL ResolvePossiblyRelativeURL(std::string url_string, | 1098 static GURL ResolvePossiblyRelativeURL(std::string url_string, |
| 1098 Extension* extension) { | 1099 Extension* extension) { |
| 1099 GURL url = GURL(url_string); | 1100 GURL url = GURL(url_string); |
| 1100 if (!url.is_valid()) | 1101 if (!url.is_valid()) |
| 1101 url = extension->GetResourceURL(url_string); | 1102 url = extension->GetResourceURL(url_string); |
| 1102 | 1103 |
| 1103 return url; | 1104 return url; |
| 1104 } | 1105 } |
| OLD | NEW |