diff options
author | miket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-22 03:59:00 +0000 |
---|---|---|
committer | miket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-22 03:59:00 +0000 |
commit | a994358f7d5a84f62d6f008a902bf1c794746be0 (patch) | |
tree | f1fc20145a36d1c20b98b7f2f71a1ab120d3fb7f | |
parent | 67bfb83fbdd401bba2cfdbe330edebf2b3105a6f (diff) | |
download | chromium_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
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); + })); + })); + })); + } +]); |