diff options
author | fangjue23303@gmail.com <fangjue23303@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-19 13:28:16 +0000 |
---|---|---|
committer | fangjue23303@gmail.com <fangjue23303@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-19 13:28:16 +0000 |
commit | 00b70e0ef54d46ccf1acc8d313868e75f6e9cd74 (patch) | |
tree | a3c8ae11552dbd4456a66f983e07a3e4353042b0 /chrome | |
parent | b53d75708f6776337a4657e54c45176f98f69cd5 (diff) | |
download | chromium_src-00b70e0ef54d46ccf1acc8d313868e75f6e9cd74.zip chromium_src-00b70e0ef54d46ccf1acc8d313868e75f6e9cd74.tar.gz chromium_src-00b70e0ef54d46ccf1acc8d313868e75f6e9cd74.tar.bz2 |
Implement Command Line Private extension API.
API proposal: https://docs.google.com/document/d/1joXXu06G3XtvJf8fSNVVvB7UCMadVO07E_v3EulPB00/edit
BUG=226915
TEST=browser_tests
Review URL: https://chromiumcodereview.appspot.com/14027005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195161 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
14 files changed, 179 insertions, 0 deletions
diff --git a/chrome/browser/extensions/api/command_line_private/command_line_private_api.cc b/chrome/browser/extensions/api/command_line_private/command_line_private_api.cc new file mode 100644 index 0000000..04b4411 --- /dev/null +++ b/chrome/browser/extensions/api/command_line_private/command_line_private_api.cc @@ -0,0 +1,39 @@ +// Copyright 2013 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. + +#include "chrome/browser/extensions/api/command_line_private/command_line_private_api.h" + +#include <string> + +#include "base/command_line.h" +#include "base/memory/scoped_ptr.h" +#include "base/values.h" +#include "chrome/common/extensions/api/command_line_private.h" + +namespace { +// This should be consistent with +// chrome/test/data/extensions/api_test/command_line/basics/test.js. +const char kEmptySwitchName[] = "Switch name is empty."; +} // namespace + +namespace extensions { + +namespace command_line_private = api::command_line_private; + +bool CommandLinePrivateHasSwitchFunction::RunImpl() { + scoped_ptr<command_line_private::HasSwitch::Params> params( + command_line_private::HasSwitch::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params); + + if (params->name.empty()) { + error_ = kEmptySwitchName; + return false; + } + + results_ = command_line_private::HasSwitch::Results::Create( + CommandLine::ForCurrentProcess()->HasSwitch(params->name)); + return true; +} + +} // namespace extensions diff --git a/chrome/browser/extensions/api/command_line_private/command_line_private_api.h b/chrome/browser/extensions/api/command_line_private/command_line_private_api.h new file mode 100644 index 0000000..68be071 --- /dev/null +++ b/chrome/browser/extensions/api/command_line_private/command_line_private_api.h @@ -0,0 +1,24 @@ +// Copyright 2013 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. + +#ifndef CHROME_BROWSER_EXTENSIONS_API_COMMAND_LINE_PRIVATE_COMMAND_LINE_PRIVATE_API_H__ +#define CHROME_BROWSER_EXTENSIONS_API_COMMAND_LINE_PRIVATE_COMMAND_LINE_PRIVATE_API_H__ + +#include "chrome/browser/extensions/extension_function.h" + +namespace extensions { + +class CommandLinePrivateHasSwitchFunction : public SyncExtensionFunction { + DECLARE_EXTENSION_FUNCTION("commandLinePrivate.hasSwitch", + COMMANDLINEPRIVATE_HASSWITCH) + protected: + virtual ~CommandLinePrivateHasSwitchFunction() {} + + // ExtensionFunction: + virtual bool RunImpl() OVERRIDE; +}; + +} // namespace extensions + +#endif // CHROME_BROWSER_EXTENSIONS_API_COMMAND_LINE_PRIVATE_COMMAND_LINE_PRIVATE_API_H__ diff --git a/chrome/browser/extensions/api/command_line_private/command_line_private_apitest.cc b/chrome/browser/extensions/api/command_line_private/command_line_private_apitest.cc new file mode 100644 index 0000000..f8fe90d --- /dev/null +++ b/chrome/browser/extensions/api/command_line_private/command_line_private_apitest.cc @@ -0,0 +1,23 @@ +// Copyright 2013 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. + +#include "base/command_line.h" +#include "chrome/browser/extensions/extension_apitest.h" + +namespace { +// This should be consistent with +// chrome/test/data/extensions/api_test/command_line/basics/test.js. +const char kTestCommandLineSwitch[] = "command-line-private-api-test-foo"; +} // namespace + +class CommandLinePrivateApiTest : public ExtensionApiTest { + virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { + ExtensionApiTest::SetUpCommandLine(command_line); + command_line->AppendSwitch(kTestCommandLineSwitch); + } +}; + +IN_PROC_BROWSER_TEST_F(CommandLinePrivateApiTest, Basics) { + EXPECT_TRUE(RunComponentExtensionTest("command_line/basics")) << message_; +} diff --git a/chrome/browser/extensions/extension_function_histogram_value.h b/chrome/browser/extensions/extension_function_histogram_value.h index 38964e9..0ce66c9 100644 --- a/chrome/browser/extensions/extension_function_histogram_value.h +++ b/chrome/browser/extensions/extension_function_histogram_value.h @@ -508,6 +508,7 @@ enum HistogramValue { DEVELOPERPRIVATE_LOADPROJECTTOSYNCFS, DEVELOPERPRIVATE_GETPROJECTSINFO, DEVELOPERPRIVATE_LOADPROJECT, + COMMANDLINEPRIVATE_HASSWITCH, ENUM_BOUNDARY // Last entry: Add new entries above. }; diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi index d67de53..3bd5ea8 100644 --- a/chrome/chrome_browser_extensions.gypi +++ b/chrome/chrome_browser_extensions.gypi @@ -114,6 +114,8 @@ 'browser/extensions/api/browsing_data/browsing_data_api.h', 'browser/extensions/api/cloud_print_private/cloud_print_private_api.cc', 'browser/extensions/api/cloud_print_private/cloud_print_private_api.h', + 'browser/extensions/api/command_line_private/command_line_private_api.cc', + 'browser/extensions/api/command_line_private/command_line_private_api.h', 'browser/extensions/api/commands/command_service.cc', 'browser/extensions/api/commands/command_service.h', 'browser/extensions/api/content_settings/content_settings_api.cc', diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index bcfbc68..7d7575b 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1243,6 +1243,7 @@ 'browser/extensions/api/bookmarks/bookmark_apitest.cc', 'browser/extensions/api/browsing_data/browsing_data_test.cc', 'browser/extensions/api/cloud_print_private/cloud_print_private_apitest.cc', + 'browser/extensions/api/command_line_private/command_line_private_apitest.cc', 'browser/extensions/api/content_settings/content_settings_apitest.cc', 'browser/extensions/api/context_menus/context_menu_apitest.cc', 'browser/extensions/api/cookies/cookies_apitest.cc', diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json index 77263ba..932ab5e 100644 --- a/chrome/common/extensions/api/_permission_features.json +++ b/chrome/common/extensions/api/_permission_features.json @@ -93,6 +93,11 @@ // CloudPrint "whitelist": ["mfehgcgbbipciphmccgaenjidiccnmng"] }, + "commandLinePrivate": { + "channel": "stable", + "extension_types": ["extension", "packaged_app", "platform_app"], + "location": "component" + }, "contentSettings": { "channel": "stable", "extension_types": ["extension", "packaged_app"] diff --git a/chrome/common/extensions/api/api.gyp b/chrome/common/extensions/api/api.gyp index d702062..b8720c7 100644 --- a/chrome/common/extensions/api/api.gyp +++ b/chrome/common/extensions/api/api.gyp @@ -29,6 +29,7 @@ 'bookmarks.json', 'chromeos_info_private.json', 'cloud_print_private.json', + 'command_line_private.json', 'content_settings.json', 'context_menus.json', 'cookies.json', diff --git a/chrome/common/extensions/api/command_line_private.json b/chrome/common/extensions/api/command_line_private.json new file mode 100644 index 0000000..2504376 --- /dev/null +++ b/chrome/common/extensions/api/command_line_private.json @@ -0,0 +1,34 @@ +// Copyright 2013 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. + +[ + { + "namespace": "commandLinePrivate", + "functions": [ + { + "name": "hasSwitch", + "type": "function", + "description": "Returns whether a switch is specified on the command line when launching Chrome.", + "parameters": [ + { + "name": "name", + "type": "string", + "description": "The name of a command line switch, without leading \"--\", such as \"enable-experimental-extension-apis\"." + }, + { + "name": "callback", + "type": "function", + "parameters": [ + { + "name": "result", + "type": "boolean", + "description": "Whether the switch is specified on the command line." + } + ] + } + ] + } + ] + } +] diff --git a/chrome/common/extensions/permissions/api_permission.h b/chrome/common/extensions/permissions/api_permission.h index 7500e00..6198701 100644 --- a/chrome/common/extensions/permissions/api_permission.h +++ b/chrome/common/extensions/permissions/api_permission.h @@ -53,6 +53,7 @@ class APIPermission { kClipboardRead, kClipboardWrite, kCloudPrintPrivate, + kCommandLinePrivate, kContentSettings, kContextMenus, kCookie, diff --git a/chrome/common/extensions/permissions/chrome_api_permissions.cc b/chrome/common/extensions/permissions/chrome_api_permissions.cc index a9abe97..0d21590 100644 --- a/chrome/common/extensions/permissions/chrome_api_permissions.cc +++ b/chrome/common/extensions/permissions/chrome_api_permissions.cc @@ -126,6 +126,8 @@ std::vector<APIPermissionInfo*> ChromeAPIPermissions::GetAllPermissions() APIPermissionInfo::kFlagCannotBeOptional }, { APIPermission::kChromeosInfoPrivate, "chromeosInfoPrivate", APIPermissionInfo::kFlagCannotBeOptional }, + { APIPermission::kCommandLinePrivate, "commandLinePrivate", + APIPermissionInfo::kFlagCannotBeOptional }, { APIPermission::kDeveloperPrivate, "developerPrivate", APIPermissionInfo::kFlagCannotBeOptional }, { APIPermission::kDial, "dial", APIPermissionInfo::kFlagCannotBeOptional }, diff --git a/chrome/common/extensions/permissions/permission_set_unittest.cc b/chrome/common/extensions/permissions/permission_set_unittest.cc index e71db7e..2649e0e 100644 --- a/chrome/common/extensions/permissions/permission_set_unittest.cc +++ b/chrome/common/extensions/permissions/permission_set_unittest.cc @@ -715,6 +715,7 @@ TEST_F(PermissionsTest, PermissionMessages) { skip.insert(APIPermission::kBookmarkManagerPrivate); skip.insert(APIPermission::kChromeosInfoPrivate); skip.insert(APIPermission::kCloudPrintPrivate); + skip.insert(APIPermission::kCommandLinePrivate); skip.insert(APIPermission::kDeveloperPrivate); skip.insert(APIPermission::kDial); skip.insert(APIPermission::kDownloadsInternal); diff --git a/chrome/test/data/extensions/api_test/command_line/basics/manifest.json b/chrome/test/data/extensions/api_test/command_line/basics/manifest.json new file mode 100644 index 0000000..8818e1a --- /dev/null +++ b/chrome/test/data/extensions/api_test/command_line/basics/manifest.json @@ -0,0 +1,8 @@ +{ + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAv7LaUkPmrLmT9bbz0Zz6u7+FGmGo9xUfGlNEy4krUinwAIugLc+WqU/wQqhTsS26fgsnKk6WbsabcMtq8pDhanJgygcsXrs9nG1B2FO3VhEKRqCs+zrpl7vm6AzBMW1sHGCDkisSZt99QXoHjd99UzeJMnRVISMSxoG+B1I2EQIDAQAB", + "name": "command_line/basics", + "version": "0.1", + "manifest_version": 2, + "background": { "scripts": ["test.js"] }, + "permissions": ["commandLinePrivate"] +} diff --git a/chrome/test/data/extensions/api_test/command_line/basics/test.js b/chrome/test/data/extensions/api_test/command_line/basics/test.js new file mode 100644 index 0000000..91159df --- /dev/null +++ b/chrome/test/data/extensions/api_test/command_line/basics/test.js @@ -0,0 +1,37 @@ +// Copyright 2013 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. + +// These string constants should be consistent with those in +// chrome/browser/extensions/api/command_line_private/. +var kTestCommandLineSwitch = 'command-line-private-api-test-foo'; +var kEmptySwitchName = 'Switch name is empty.'; + +var kNonExistingSwitch = 'foo-bar-non-existing-switch'; + +var pass = chrome.test.callbackPass; +var fail = chrome.test.callbackFail; +var assertTrue = chrome.test.assertTrue; +var assertFalse = chrome.test.assertFalse; + +chrome.test.runTests([ + + function testHaveSwitch() { + chrome.commandLinePrivate.hasSwitch(kTestCommandLineSwitch, + pass(function(result) { + assertTrue(result); + })); + }, + + function testNotHaveSwitch() { + chrome.commandLinePrivate.hasSwitch(kNonExistingSwitch, + pass(function(result) { + assertFalse(result); + })); + }, + + function testInvalidArgs() { + chrome.commandLinePrivate.hasSwitch('', fail(kEmptySwitchName)); + } + +]); |