summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormiket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-28 00:25:15 +0000
committermiket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-28 00:25:15 +0000
commit2d62310296eb3c7eb6f92d7eb699dafa5450dac8 (patch)
tree10bb322e2b635b3100aa48874cdfc6d73e7f139e
parent6ccd0de45b86d609168b2138c750ef315b163df9 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/extensions/extension_tabs_apitest.cc6
-rw-r--r--chrome/browser/extensions/extension_tabs_module.cc13
-rw-r--r--chrome/common/extensions/api/extension_api.json3
-rw-r--r--chrome/common/extensions/docs/tabs.html4
-rw-r--r--chrome/test/data/extensions/api_test/tabs/basics/update.js7
-rw-r--r--chrome/test/data/extensions/api_test/tabs/no_permissions/manifest.json5
-rw-r--r--chrome/test/data/extensions/api_test/tabs/no_permissions/update.html13
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>