diff options
author | miket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-28 00:25:15 +0000 |
---|---|---|
committer | miket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-28 00:25:15 +0000 |
commit | 2d62310296eb3c7eb6f92d7eb699dafa5450dac8 (patch) | |
tree | 10bb322e2b635b3100aa48874cdfc6d73e7f139e | |
parent | 6ccd0de45b86d609168b2138c750ef315b163df9 (diff) | |
download | chromium_src-2d62310296eb3c7eb6f92d7eb699dafa5450dac8.zip chromium_src-2d62310296eb3c7eb6f92d7eb699dafa5450dac8.tar.gz chromium_src-2d62310296eb3c7eb6f92d7eb699dafa5450dac8.tar.bz2 |
chrome.tabs.update now returns null Tab when no tabs permission.
BUG=97674
TEST=added a test extension with permissions, enhanced an existing one.
Review URL: http://codereview.chromium.org/7967021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@103059 0039d316-1c4b-4281-b951-d872f2087c98
7 files changed, 44 insertions, 7 deletions
diff --git a/chrome/browser/extensions/extension_tabs_apitest.cc b/chrome/browser/extensions/extension_tabs_apitest.cc index 9f74d46..3156ce7 100644 --- a/chrome/browser/extensions/extension_tabs_apitest.cc +++ b/chrome/browser/extensions/extension_tabs_apitest.cc @@ -81,6 +81,12 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabUpdate) { ASSERT_TRUE(RunExtensionSubtest("tabs/basics", "update.html")) << message_; } +IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabUpdateNoPermissions) { + ASSERT_TRUE(StartTestServer()); + ASSERT_TRUE(RunExtensionSubtest( + "tabs/no_permissions", "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 7367e77..5f55e70 100644 --- a/chrome/browser/extensions/extension_tabs_module.cc +++ b/chrome/browser/extensions/extension_tabs_module.cc @@ -816,10 +816,15 @@ bool UpdateTabFunction::RunImpl() { tab_index = tab_strip->GetIndexOfTabContents(contents); } - if (has_callback()) - result_.reset(ExtensionTabUtil::CreateTabValue(contents->tab_contents(), - tab_strip, - tab_index)); + if (has_callback()) { + if (GetExtension()->HasAPIPermission(ExtensionAPIPermission::kTab)) { + result_.reset(ExtensionTabUtil::CreateTabValue(contents->tab_contents(), + tab_strip, + tab_index)); + } else { + result_.reset(Value::CreateNullValue()); + } + } SendResponse(true); return true; diff --git a/chrome/common/extensions/api/extension_api.json b/chrome/common/extensions/api/extension_api.json index 094ee6f..2a9c1f4 100644 --- a/chrome/common/extensions/api/extension_api.json +++ b/chrome/common/extensions/api/extension_api.json @@ -1569,7 +1569,8 @@ { "name": "tab", "$ref": "Tab", - "description": "Details about the updated tab." + "optional": true, + "description": "Details about the updated tab, or <code>null</code> if the 'tabs' permission has not been requested." } ] } diff --git a/chrome/common/extensions/docs/tabs.html b/chrome/common/extensions/docs/tabs.html index 29f5708..10c3b6b 100644 --- a/chrome/common/extensions/docs/tabs.html +++ b/chrome/common/extensions/docs/tabs.html @@ -5938,7 +5938,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> @@ -5960,7 +5960,7 @@ For other examples and for help in viewing the source code, see <dd class="todo" style="display: none; "> Undocumented. </dd> - <dd>Details about the updated tab.</dd> + <dd>Details about the updated tab, or <code>null</code> if the 'tabs' permission has not been requested.</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.js b/chrome/test/data/extensions/api_test/tabs/basics/update.js index 4d9ee7a..2fff077 100644 --- a/chrome/test/data/extensions/api_test/tabs/basics/update.js +++ b/chrome/test/data/extensions/api_test/tabs/basics/update.js @@ -66,5 +66,12 @@ chrome.test.runTests([ })); })); })); + }, + + function testUpdatingWithPermissionReturnsTabInfo() { + chrome.tabs.update( + undefined, {"url": pageUrl("neutrinos")}, pass(function(tab) { + assertEq(pageUrl("neutrinos"), tab.url); + })); } ]); diff --git a/chrome/test/data/extensions/api_test/tabs/no_permissions/manifest.json b/chrome/test/data/extensions/api_test/tabs/no_permissions/manifest.json new file mode 100644 index 0000000..a9c127e --- /dev/null +++ b/chrome/test/data/extensions/api_test/tabs/no_permissions/manifest.json @@ -0,0 +1,5 @@ +{ + "name": "chrome.tabs-no-permissions", + "version": "0.1", + "description": "chrome.tabs API, extension with no permissions" +} diff --git a/chrome/test/data/extensions/api_test/tabs/no_permissions/update.html b/chrome/test/data/extensions/api_test/tabs/no_permissions/update.html new file mode 100644 index 0000000..2f6ebd1 --- /dev/null +++ b/chrome/test/data/extensions/api_test/tabs/no_permissions/update.html @@ -0,0 +1,13 @@ +<script> +var pass = chrome.test.callbackPass; +var assertEq = chrome.test.assertEq; + +chrome.test.runTests([ + function testUpdatingWithoutPermissionReturnsNoTabInfo() { + chrome.tabs.update( + undefined, {"url": "neutrinos"}, pass(function(tab) { + assertEq(null, tab); + })); + } +]); +</script> |