summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormiket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-22 03:59:00 +0000
committermiket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-22 03:59:00 +0000
commita994358f7d5a84f62d6f008a902bf1c794746be0 (patch)
treef1fc20145a36d1c20b98b7f2f71a1ab120d3fb7f
parent67bfb83fbdd401bba2cfdbe330edebf2b3105a6f (diff)
downloadchromium_src-a994358f7d5a84f62d6f008a902bf1c794746be0.zip
chromium_src-a994358f7d5a84f62d6f008a902bf1c794746be0.tar.gz
chromium_src-a994358f7d5a84f62d6f008a902bf1c794746be0.tar.bz2
Make chrome.tabs.update's tabId parameter optional.
BUG=97330 TEST=added appropriate browser test Review URL: http://codereview.chromium.org/7981040 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@102235 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/extension_tabs_apitest.cc5
-rw-r--r--chrome/browser/extensions/extension_tabs_module.cc30
-rw-r--r--chrome/common/extensions/api/extension_api.json8
-rw-r--r--chrome/common/extensions/docs/tabs.html10
-rw-r--r--chrome/test/data/extensions/api_test/tabs/basics/update.html2
-rw-r--r--chrome/test/data/extensions/api_test/tabs/basics/update.js70
6 files changed, 113 insertions, 12 deletions
diff --git a/chrome/browser/extensions/extension_tabs_apitest.cc b/chrome/browser/extensions/extension_tabs_apitest.cc
index ce2603c..9f74d46 100644
--- a/chrome/browser/extensions/extension_tabs_apitest.cc
+++ b/chrome/browser/extensions/extension_tabs_apitest.cc
@@ -76,6 +76,11 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Tabs2) {
ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "crud2.html")) << message_;
}
+IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabUpdate) {
+ ASSERT_TRUE(StartTestServer());
+ ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "update.html")) << message_;
+}
+
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabPinned) {
ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "pinned.html")) << message_;
diff --git a/chrome/browser/extensions/extension_tabs_module.cc b/chrome/browser/extensions/extension_tabs_module.cc
index 4d38757..901029b 100644
--- a/chrome/browser/extensions/extension_tabs_module.cc
+++ b/chrome/browser/extensions/extension_tabs_module.cc
@@ -894,18 +894,38 @@ UpdateTabFunction::UpdateTabFunction() {
}
bool UpdateTabFunction::RunImpl() {
- int tab_id;
- EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &tab_id));
DictionaryValue* update_props;
EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &update_props));
- TabStripModel* tab_strip = NULL;
+ Value* tab_value = NULL;
+ if (HasOptionalArgument(0)) {
+ EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &tab_value));
+ }
+
+ int tab_id = -1;
TabContentsWrapper* contents = NULL;
+ if (tab_value == NULL || tab_value->IsType(Value::TYPE_NULL)) {
+ Browser* browser = GetCurrentBrowser();
+ if (!browser) {
+ error_ = keys::kNoCurrentWindowError;
+ return false;
+ }
+ contents = browser->tabstrip_model()->GetActiveTabContents();
+ if (!contents) {
+ error_ = keys::kNoSelectedTabError;
+ return false;
+ }
+ tab_id = ExtensionTabUtil::GetTabId(contents->tab_contents());
+ } else {
+ EXTENSION_FUNCTION_VALIDATE(tab_value->GetAsInteger(&tab_id));
+ }
+
int tab_index = -1;
+ TabStripModel* tab_strip = NULL;
if (!GetTabById(tab_id, profile(), include_incognito(),
- NULL, &tab_strip, &contents, &tab_index, &error_))
+ NULL, &tab_strip, &contents, &tab_index, &error_)) {
return false;
-
+ }
NavigationController& controller = contents->controller();
// TODO(rafaelw): handle setting remaining tab properties:
diff --git a/chrome/common/extensions/api/extension_api.json b/chrome/common/extensions/api/extension_api.json
index 66b05c386..7f755fc 100644
--- a/chrome/common/extensions/api/extension_api.json
+++ b/chrome/common/extensions/api/extension_api.json
@@ -1534,7 +1534,13 @@
"type": "function",
"description": "Modifies the properties of a tab. Properties that are not specified in <var>updateProperties</var> are not modified. Note: This function can be used without requesting the 'tabs' permission in the manifest.",
"parameters": [
- {"type": "integer", "name": "tabId", "minimum": 0},
+ {
+ "type": "integer",
+ "name": "tabId",
+ "minimum": 0,
+ "optional": true,
+ "description": "Defaults to the selected tab of the <a href='windows.html#current-window'>current window</a>."
+ },
{
"type": "object",
"name": "updateProperties",
diff --git a/chrome/common/extensions/docs/tabs.html b/chrome/common/extensions/docs/tabs.html
index 8de8237..29f5708 100644
--- a/chrome/common/extensions/docs/tabs.html
+++ b/chrome/common/extensions/docs/tabs.html
@@ -5480,7 +5480,7 @@ For other examples and for help in viewing the source code, see
<div class="summary"><span style="display: none; ">void</span>
<!-- Note: intentionally longer 80 columns -->
- <span>chrome.tabs.update</span>(<span class="null"><span style="display: none; ">, </span><span>integer</span>
+ <span>chrome.tabs.update</span>(<span class="optional"><span style="display: none; ">, </span><span>integer</span>
<var><span>tabId</span></var></span><span class="null"><span>, </span><span>object</span>
<var><span>updateProperties</span></var></span><span class="optional"><span>, </span><span>function</span>
<var><span>callback</span></var></span>)</div>
@@ -5501,7 +5501,7 @@ For other examples and for help in viewing the source code, see
<!-- TYPE -->
<div style="display:inline">
(
- <span class="optional" style="display: none; ">optional</span>
+ <span class="optional">optional</span>
<span class="enum" style="display: none; ">enumerated</span>
<span id="typeTemplate">
<span style="display: none; ">
@@ -5520,12 +5520,10 @@ For other examples and for help in viewing the source code, see
</em>
</dt>
- <dd class="todo">
+ <dd class="todo" style="display: none; ">
Undocumented.
</dd>
- <dd style="display: none; ">
- Description of this parameter from the json schema.
- </dd>
+ <dd>Defaults to the selected tab of the <a href="windows.html#current-window">current window</a>.</dd>
<dd style="display: none; ">
This parameter was added in version
<b><span></span></b>.
diff --git a/chrome/test/data/extensions/api_test/tabs/basics/update.html b/chrome/test/data/extensions/api_test/tabs/basics/update.html
new file mode 100644
index 0000000..f797e19
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/tabs/basics/update.html
@@ -0,0 +1,2 @@
+<script src="tabs_util.js"></script>
+<script src="update.js"></script>
diff --git a/chrome/test/data/extensions/api_test/tabs/basics/update.js b/chrome/test/data/extensions/api_test/tabs/basics/update.js
new file mode 100644
index 0000000..4d9ee7a
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/tabs/basics/update.js
@@ -0,0 +1,70 @@
+// 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.
+
+var tabIds = [];
+var kFooUrl = "foo";
+var kBarUrl = "bar";
+
+chrome.test.runTests([
+ function setUp() {
+ chrome.tabs.create({"url": pageUrl("a")}, function(tab) {
+ tabIds.push(tab.id);
+ });
+ chrome.tabs.create({"url": pageUrl("b")}, function(tab) {
+ tabIds.push(tab.id);
+ });
+ chrome.tabs.create({"url": pageUrl("c")}, function(tab) {
+ tabIds.push(tab.id);
+ });
+ chrome.windows.create({"url": pageUrl("xxx")}, pass(function(tab) {}));
+ },
+
+ function testBasicSetup() {
+ chrome.tabs.get(tabIds[0], pass(function(tab) {
+ assertEq(pageUrl("a"), tab.url);
+ }));
+ chrome.tabs.get(tabIds[1], pass(function(tab) {
+ assertEq(pageUrl("b"), tab.url);
+ }));
+ chrome.tabs.get(tabIds[2], pass(function(tab) {
+ assertEq(pageUrl("c"), tab.url);
+ }));
+ },
+
+ function testUpdatingDefaultTabViaUndefined() {
+ chrome.tabs.update(
+ tabIds[1],
+ {"selected": true},
+ pass(function(tab) {
+ chrome.tabs.update(
+ undefined,
+ {"url": pageUrl(kFooUrl)},
+ pass(function(tab) {
+ chrome.tabs.get(
+ tabIds[1],
+ pass(function(tab) {
+ assertEq(pageUrl(kFooUrl), tab.url);
+ }));
+ }));
+ }));
+ },
+
+ function testUpdatingDefaultTabViaNull() {
+ chrome.tabs.update(
+ tabIds[2],
+ {"selected": true},
+ pass(function(tab) {
+ chrome.tabs.update(
+ null,
+ {"url": pageUrl(kBarUrl)},
+ pass(function(tab) {
+ chrome.tabs.get(
+ tabIds[2],
+ pass(function(tab) {
+ assertEq(pageUrl(kBarUrl), tab.url);
+ }));
+ }));
+ }));
+ }
+]);