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

Side by Side Diff: chrome/browser/extensions/extension_tabs_module.cc

Issue 10175008: Improving the process model extension API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Improved task manager sample and minor cleanup. Created 8 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 | 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/extensions/extension_tabs_module.h" 5 #include "chrome/browser/extensions/extension_tabs_module.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 browser, tab_strip, contents, tab_index)) 188 browser, tab_strip, contents, tab_index))
189 return true; 189 return true;
190 190
191 if (error_message) 191 if (error_message)
192 *error_message = ExtensionErrorUtils::FormatErrorMessage( 192 *error_message = ExtensionErrorUtils::FormatErrorMessage(
193 keys::kTabNotFoundError, base::IntToString(tab_id)); 193 keys::kTabNotFoundError, base::IntToString(tab_id));
194 194
195 return false; 195 return false;
196 } 196 }
197 197
198 // Reads the |value| as either a single integer value or a list of integers.
199 bool ReadOneOrMoreIntegers(
200 Value* value, std::vector<int>* result) {
201 if (value->IsType(Value::TYPE_INTEGER)) {
202 int tab_id = -1;
203 if (!value->GetAsInteger(&tab_id))
204 return false;
205 result->push_back(tab_id);
206 return true;
207
208 } else if (value->IsType(Value::TYPE_LIST)) {
209 ListValue* tabs = static_cast<ListValue*>(value);
210 for (size_t i = 0; i < tabs->GetSize(); ++i) {
211 int tab_id = -1;
212 if (!tabs->GetInteger(i, &tab_id))
213 return false;
214 result->push_back(tab_id);
215 }
216 return true;
217 }
218 return false;
219 }
220
221 // A three state enum to distinguish between when a boolean query argument is 198 // A three state enum to distinguish between when a boolean query argument is
222 // set or not. 199 // set or not.
223 enum QueryArg { 200 enum QueryArg {
224 NOT_SET = -1, 201 NOT_SET = -1,
225 MATCH_FALSE, 202 MATCH_FALSE,
226 MATCH_TRUE 203 MATCH_TRUE
227 }; 204 };
228 205
229 bool MatchesQueryArg(QueryArg arg, bool value) { 206 bool MatchesQueryArg(QueryArg arg, bool value) {
230 if (arg == NOT_SET) 207 if (arg == NOT_SET)
(...skipping 903 matching lines...) Expand 10 before | Expand all | Expand 10 after
1134 return false; 1111 return false;
1135 1112
1136 TabStripModel* tabstrip = browser->tabstrip_model(); 1113 TabStripModel* tabstrip = browser->tabstrip_model();
1137 TabStripSelectionModel selection; 1114 TabStripSelectionModel selection;
1138 int active_index = -1; 1115 int active_index = -1;
1139 1116
1140 Value* tab_value = NULL; 1117 Value* tab_value = NULL;
1141 EXTENSION_FUNCTION_VALIDATE(info->Get(keys::kTabsKey, &tab_value)); 1118 EXTENSION_FUNCTION_VALIDATE(info->Get(keys::kTabsKey, &tab_value));
1142 1119
1143 std::vector<int> tab_indices; 1120 std::vector<int> tab_indices;
1144 EXTENSION_FUNCTION_VALIDATE(ReadOneOrMoreIntegers(tab_value, &tab_indices)); 1121 EXTENSION_FUNCTION_VALIDATE(ExtensionTabUtil::ReadOneOrMoreIntegers(
1122 tab_value, &tab_indices));
1145 1123
1146 // Create a new selection model as we read the list of tab indices. 1124 // Create a new selection model as we read the list of tab indices.
1147 for (size_t i = 0; i < tab_indices.size(); ++i) { 1125 for (size_t i = 0; i < tab_indices.size(); ++i) {
1148 int index = tab_indices[i]; 1126 int index = tab_indices[i];
1149 1127
1150 // Make sure the index is in range. 1128 // Make sure the index is in range.
1151 if (!tabstrip->ContainsIndex(index)) { 1129 if (!tabstrip->ContainsIndex(index)) {
1152 error_ = ExtensionErrorUtils::FormatErrorMessage( 1130 error_ = ExtensionErrorUtils::FormatErrorMessage(
1153 keys::kTabIndexNotFoundError, base::IntToString(index)); 1131 keys::kTabIndexNotFoundError, base::IntToString(index));
1154 return false; 1132 return false;
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1396 1374
1397 Observe(NULL); 1375 Observe(NULL);
1398 Release(); // Balanced in UpdateURLIfPresent(). 1376 Release(); // Balanced in UpdateURLIfPresent().
1399 } 1377 }
1400 1378
1401 bool MoveTabsFunction::RunImpl() { 1379 bool MoveTabsFunction::RunImpl() {
1402 Value* tab_value = NULL; 1380 Value* tab_value = NULL;
1403 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &tab_value)); 1381 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &tab_value));
1404 1382
1405 std::vector<int> tab_ids; 1383 std::vector<int> tab_ids;
1406 EXTENSION_FUNCTION_VALIDATE(ReadOneOrMoreIntegers(tab_value, &tab_ids)); 1384 EXTENSION_FUNCTION_VALIDATE(ExtensionTabUtil::ReadOneOrMoreIntegers(
1385 tab_value, &tab_ids));
1407 1386
1408 DictionaryValue* update_props = NULL; 1387 DictionaryValue* update_props = NULL;
1409 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &update_props)); 1388 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &update_props));
1410 1389
1411 int new_index = -1; 1390 int new_index = -1;
1412 EXTENSION_FUNCTION_VALIDATE(update_props->GetInteger( 1391 EXTENSION_FUNCTION_VALIDATE(update_props->GetInteger(
1413 keys::kIndexKey, &new_index)); 1392 keys::kIndexKey, &new_index));
1414 EXTENSION_FUNCTION_VALIDATE(new_index >= 0); 1393 EXTENSION_FUNCTION_VALIDATE(new_index >= 0);
1415 1394
1416 ListValue tab_values; 1395 ListValue tab_values;
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
1565 } 1544 }
1566 1545
1567 return true; 1546 return true;
1568 } 1547 }
1569 1548
1570 bool RemoveTabsFunction::RunImpl() { 1549 bool RemoveTabsFunction::RunImpl() {
1571 Value* tab_value = NULL; 1550 Value* tab_value = NULL;
1572 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &tab_value)); 1551 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &tab_value));
1573 1552
1574 std::vector<int> tab_ids; 1553 std::vector<int> tab_ids;
1575 EXTENSION_FUNCTION_VALIDATE(ReadOneOrMoreIntegers(tab_value, &tab_ids)); 1554 EXTENSION_FUNCTION_VALIDATE(ExtensionTabUtil::ReadOneOrMoreIntegers(
1555 tab_value, &tab_ids));
1576 1556
1577 for (size_t i = 0; i < tab_ids.size(); ++i) { 1557 for (size_t i = 0; i < tab_ids.size(); ++i) {
1578 Browser* browser = NULL; 1558 Browser* browser = NULL;
1579 TabContentsWrapper* contents = NULL; 1559 TabContentsWrapper* contents = NULL;
1580 if (!GetTabById(tab_ids[i], profile(), include_incognito(), 1560 if (!GetTabById(tab_ids[i], profile(), include_incognito(),
1581 &browser, NULL, &contents, NULL, &error_)) 1561 &browser, NULL, &contents, NULL, &error_))
1582 return false; 1562 return false;
1583 1563
1584 // Don't let the extension remove a tab if the user is dragging tabs around. 1564 // Don't let the extension remove a tab if the user is dragging tabs around.
1585 if (!browser->IsTabStripEditable()) { 1565 if (!browser->IsTabStripEditable()) {
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
1828 // called for every API call the extension made. 1808 // called for every API call the extension made.
1829 GotLanguage(language); 1809 GotLanguage(language);
1830 } 1810 }
1831 1811
1832 void DetectTabLanguageFunction::GotLanguage(const std::string& language) { 1812 void DetectTabLanguageFunction::GotLanguage(const std::string& language) {
1833 result_.reset(Value::CreateStringValue(language.c_str())); 1813 result_.reset(Value::CreateStringValue(language.c_str()));
1834 SendResponse(true); 1814 SendResponse(true);
1835 1815
1836 Release(); // Balanced in Run() 1816 Release(); // Balanced in Run()
1837 } 1817 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698