Index: chrome/renderer/extensions/extension_api_client_unittest.cc |
diff --git a/chrome/renderer/extensions/extension_api_client_unittest.cc b/chrome/renderer/extensions/extension_api_client_unittest.cc |
deleted file mode 100644 |
index 632557b6a083ad6a6f1e85a3305a4a3d1b6ecfe2..0000000000000000000000000000000000000000 |
--- a/chrome/renderer/extensions/extension_api_client_unittest.cc |
+++ /dev/null |
@@ -1,740 +0,0 @@ |
-// Copyright (c) 2010 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/file_util.h" |
-#include "base/json/json_reader.h" |
-#include "base/json/json_writer.h" |
-#include "base/path_service.h" |
-#include "base/string_util.h" |
-#include "chrome/common/chrome_paths.h" |
-#include "chrome/common/render_messages.h" |
-#include "chrome/renderer/extensions/extension_process_bindings.h" |
-#include "chrome/renderer/extensions/renderer_extension_bindings.h" |
-#include "chrome/test/render_view_test.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-// Make failures easier to locate by using SCOPED_TRACE() to print out the line |
-// number of a failing call to ExtensionAPIClientTest::ExpectJs(Pass|Fail) . |
-// Sadly, a #define is the only reasonable way to get the line number. |
-#define ExpectJsFail(js, expected_failure_message) { \ |
- SCOPED_TRACE(js); \ |
- ExpectJsFailInternal(js, expected_failure_message); \ |
-} |
- |
-#define ExpectJsPass(js, function, arg1) { \ |
- SCOPED_TRACE(js); \ |
- ExpectJsPassInternal(js, function, arg1); \ |
-} |
- |
-class ExtensionAPIClientTest : public RenderViewTest { |
- protected: |
- virtual void SetUp() { |
- RenderViewTest::SetUp(); |
- |
- render_thread_.SetExtensionProcess(true); |
- render_thread_.sink().ClearMessages(); |
- LoadHTML("<body></body>"); |
- } |
- |
- std::string GetConsoleMessage() { |
- const IPC::Message* message = |
- render_thread_.sink().GetUniqueMessageMatching( |
- ViewHostMsg_AddMessageToConsole::ID); |
- ViewHostMsg_AddMessageToConsole::Param params; |
- if (message) { |
- ViewHostMsg_AddMessageToConsole::Read(message, ¶ms); |
- render_thread_.sink().ClearMessages(); |
- return WideToASCII(params.a); |
- } else { |
- return ""; |
- } |
- } |
- |
- // Don't call this directly. Use the macro ExpectJsFail. |
- void ExpectJsFailInternal(const std::string& js, const std::string& message) { |
- ExecuteJavaScript(js.c_str()); |
- EXPECT_EQ(message, GetConsoleMessage()); |
- render_thread_.sink().ClearMessages(); |
- } |
- |
- // Don't call this directly. Use the macro ExpectJsPass. |
- void ExpectJsPassInternal(const std::string& js, |
- const std::string& function, |
- const std::string& arg1) { |
- ExecuteJavaScript(js.c_str()); |
- const IPC::Message* request_msg = |
- render_thread_.sink().GetUniqueMessageMatching( |
- ViewHostMsg_ExtensionRequest::ID); |
- ASSERT_EQ("", GetConsoleMessage()) << js; |
- ASSERT_TRUE(request_msg) << js; |
- ViewHostMsg_ExtensionRequest::Param params; |
- ViewHostMsg_ExtensionRequest::Read(request_msg, ¶ms); |
- ASSERT_EQ(function.c_str(), params.a) << js; |
- |
- ASSERT_TRUE(params.b.IsType(Value::TYPE_LIST)); |
- ListValue* args = ¶ms.b; |
- |
- base::JSONReader reader; |
- scoped_ptr<Value> arg1_value(reader.JsonToValue(arg1, false, false)); |
- ASSERT_TRUE(arg1_value.get()) |
- << "Failed to parse expected result as JSON: " << arg1; |
- |
- std::string args_as_string; |
- base::JSONWriter::Write(args, false, &args_as_string); |
- |
- ASSERT_TRUE(args->Equals(arg1_value.get())) |
- << js |
- << "\n Expected "<< arg1 |
- << "\n Actual: "<< args_as_string; |
- render_thread_.sink().ClearMessages(); |
- } |
-}; |
- |
-// Tests that callback dispatching works correctly and that JSON is properly |
-// deserialized before handing off to the extension code. We use the createTab |
-// API here, but we could use any of them since they all dispatch callbacks the |
-// same way. |
-TEST_F(ExtensionAPIClientTest, CallbackDispatching) { |
- ExecuteJavaScript( |
- "function assert(truth, message) {" |
- " if (!truth) {" |
- " throw new Error(message);" |
- " }" |
- "}" |
- "function callback(result) {" |
- " assert(typeof result == 'object', 'result not object');" |
- " assert(JSON.stringify(result) == '{\"id\":1,\"index\":1,\"windowId\":1," |
- "\"selected\":true,\"incognito\":false," |
- "\"url\":\"http://www.google.com/\"}'," |
- " 'incorrect result');" |
- " console.log('pass')" |
- "}" |
- "chrome.tabs.create({}, callback);" |
- ); |
- |
- EXPECT_EQ("", GetConsoleMessage()); |
- |
- // Ok, we should have gotten a message to create a tab, grab the callback ID. |
- const IPC::Message* request_msg = |
- render_thread_.sink().GetUniqueMessageMatching( |
- ViewHostMsg_ExtensionRequest::ID); |
- ASSERT_TRUE(request_msg); |
- ViewHostMsg_ExtensionRequest::Param params; |
- ViewHostMsg_ExtensionRequest::Read(request_msg, ¶ms); |
- int callback_id = params.d; |
- ASSERT_GE(callback_id, 0); |
- |
- // Now send the callback a response |
- ExtensionProcessBindings::HandleResponse( |
- callback_id, true, "{\"id\":1,\"index\":1,\"windowId\":1,\"selected\":true," |
- "\"incognito\":false,\"url\":\"http://www.google.com/\"}", ""); |
- |
- // And verify that it worked |
- ASSERT_EQ("pass", GetConsoleMessage()); |
-} |
- |
-// The remainder of these tests exercise the client side of the various |
-// extension functions. We test both error and success conditions, but do not |
-// test errors exhaustively as json schema code is well tested by itself. |
- |
-// Window API tests |
- |
-TEST_F(ExtensionAPIClientTest, GetWindow) { |
- ExpectJsFail("chrome.windows.get(32, function(){}, 20);", |
- "Uncaught Error: Too many arguments."); |
- |
- ExpectJsFail("chrome.windows.get(32);", |
- "Uncaught Error: Parameter 1 is required."); |
- |
- ExpectJsFail("chrome.windows.get('abc', function(){});", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'integer' but got 'string'."); |
- |
- ExpectJsFail("chrome.windows.get(1, 1);", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Expected 'function' but got 'integer'."); |
- |
- ExpectJsPass("chrome.windows.get(2, function(){})", |
- "windows.get", "[2]"); |
-} |
- |
-// This test flakily crashes (http://crbug.com/22248) |
-TEST_F(ExtensionAPIClientTest, DISABLED_GetCurrentWindow) { |
- ExpectJsFail("chrome.windows.getCurrent(function(){}, 20);", |
- "Uncaught Error: Too many arguments."); |
- |
- ExpectJsFail("chrome.windows.getCurrent();", |
- "Uncaught Error: Parameter 0 is required."); |
- |
- ExpectJsFail("chrome.windows.getCurrent('abc');", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'function' but got 'string'."); |
- |
- ExpectJsPass("chrome.windows.getCurrent(function(){})", |
- "windows.getCurrent", "null"); |
-} |
- |
-// This test flakily crashes (http://crbug.com/22248) |
-TEST_F(ExtensionAPIClientTest, DISABLED_GetLastFocusedWindow) { |
- ExpectJsFail("chrome.windows.getLastFocused(function(){}, 20);", |
- "Uncaught Error: Too many arguments."); |
- |
- ExpectJsFail("chrome.windows.getLastFocused();", |
- "Uncaught Error: Parameter 0 is required."); |
- |
- ExpectJsFail("chrome.windows.getLastFocused('abc');", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'function' but got 'string'."); |
- |
- ExpectJsPass("chrome.windows.getLastFocused(function(){})", |
- "windows.getLastFocused", "null"); |
-} |
- |
-// This test flakily crashes (http://crbug.com/22248) |
-TEST_F(ExtensionAPIClientTest, DISABLED_GetAllWindows) { |
- ExpectJsFail("chrome.windows.getAll({populate: true}, function(){}, 20);", |
- "Uncaught Error: Too many arguments."); |
- |
- ExpectJsFail("chrome.windows.getAll(1, function(){});", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'object' but got 'integer'."); |
- |
- ExpectJsPass("chrome.windows.getAll({populate:true}, function(){})", |
- "windows.getAll", "{\"populate\":true}"); |
- |
- ExpectJsPass("chrome.windows.getAll(null, function(){})", |
- "windows.getAll", "null"); |
- |
- ExpectJsPass("chrome.windows.getAll({}, function(){})", |
- "windows.getAll", "{}"); |
- |
- ExpectJsPass("chrome.windows.getAll(undefined, function(){})", |
- "windows.getAll", "null"); |
-} |
- |
-// Flaky on Windows. http://crosbug.com/46217 |
-#if defined(OS_WIN) |
-#define MAYBE_CreateWindow FLAKY_CreateWindow |
-#else |
-#define MAYBE_CreateWindow CreateWindow |
-#endif |
-TEST_F(ExtensionAPIClientTest, MAYBE_CreateWindow) { |
- ExpectJsFail("chrome.windows.create({url: 1}, function(){});", |
- "Uncaught Error: Invalid value for argument 0. Property " |
- "'url': Expected 'string' but got 'integer'."); |
- ExpectJsFail("chrome.windows.create({left: 'foo'}, function(){});", |
- "Uncaught Error: Invalid value for argument 0. Property " |
- "'left': Expected 'integer' but got 'string'."); |
- ExpectJsFail("chrome.windows.create({top: 'foo'}, function(){});", |
- "Uncaught Error: Invalid value for argument 0. Property " |
- "'top': Expected 'integer' but got 'string'."); |
- ExpectJsFail("chrome.windows.create({width: 'foo'}, function(){});", |
- "Uncaught Error: Invalid value for argument 0. Property " |
- "'width': Expected 'integer' but got 'string'."); |
- ExpectJsFail("chrome.windows.create({height: 'foo'}, function(){});", |
- "Uncaught Error: Invalid value for argument 0. Property " |
- "'height': Expected 'integer' but got 'string'."); |
- ExpectJsFail("chrome.windows.create({foo: 42}, function(){});", |
- "Uncaught Error: Invalid value for argument 0. Property " |
- "'foo': Unexpected property."); |
- |
- ExpectJsPass("chrome.windows.create({" |
- " url:'http://www.google.com/'," |
- " left:0," |
- " top: 10," |
- " width:100," |
- " height:200" |
- "})", |
- "windows.create", |
- "[{\"url\":\"http://www.google.com/\"," |
- "\"left\":0," |
- "\"top\":10," |
- "\"width\":100," |
- "\"height\":200}]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, UpdateWindow) { |
- ExpectJsFail("chrome.windows.update(null);", |
- "Uncaught Error: Parameter 0 is required."); |
- ExpectJsFail("chrome.windows.update(42, {left: 'foo'});", |
- "Uncaught Error: Invalid value for argument 1. Property " |
- "'left': Expected 'integer' but got 'string'."); |
- ExpectJsFail("chrome.windows.update(42, {top: 'foo'});", |
- "Uncaught Error: Invalid value for argument 1. Property " |
- "'top': Expected 'integer' but got 'string'."); |
- ExpectJsFail("chrome.windows.update(42, {height: false});", |
- "Uncaught Error: Invalid value for argument 1. Property " |
- "'height': Expected 'integer' but got 'boolean'."); |
- ExpectJsFail("chrome.windows.update(42, {width: false});", |
- "Uncaught Error: Invalid value for argument 1. Property " |
- "'width': Expected 'integer' but got 'boolean'."); |
- ExpectJsFail("chrome.windows.update(42, {foo: false});", |
- "Uncaught Error: Invalid value for argument 1. Property " |
- "'foo': Unexpected property."); |
- |
- ExpectJsPass("chrome.windows.update(42, {" |
- " width:100," |
- " height:200" |
- "})", |
- "windows.update", |
- "[42," |
- "{\"width\":100," |
- "\"height\":200}]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, RemoveWindow) { |
- ExpectJsFail("chrome.windows.remove(32, function(){}, 20);", |
- "Uncaught Error: Too many arguments."); |
- |
- ExpectJsFail("chrome.windows.remove('abc', function(){});", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'integer' but got 'string'."); |
- |
- ExpectJsFail("chrome.windows.remove(1, 1);", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Expected 'function' but got 'integer'."); |
- |
- ExpectJsPass("chrome.windows.remove(2, function(){})", |
- "windows.remove", "[2]"); |
- |
- ExpectJsPass("chrome.windows.remove(2)", |
- "windows.remove", "[2]"); |
-} |
- |
-// Tab API tests |
- |
-TEST_F(ExtensionAPIClientTest, GetTab) { |
- ExpectJsFail("chrome.tabs.get(32, function(){}, 20);", |
- "Uncaught Error: Too many arguments."); |
- |
- ExpectJsFail("chrome.tabs.get(32);", |
- "Uncaught Error: Parameter 1 is required."); |
- |
- ExpectJsFail("chrome.tabs.get('abc', function(){});", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'integer' but got 'string'."); |
- |
- ExpectJsFail("chrome.tabs.get(1, 1);", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Expected 'function' but got 'integer'."); |
- |
- ExpectJsPass("chrome.tabs.get(2, function(){})", |
- "tabs.get", "[2]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, GetCurrentTab) { |
- ExpectJsFail("chrome.tabs.getCurrent(function(){}, 20);", |
- "Uncaught Error: Too many arguments."); |
- |
- ExpectJsFail("chrome.tabs.getCurrent();", |
- "Uncaught Error: Parameter 0 is required."); |
- |
- ExpectJsFail("chrome.tabs.getCurrent('abc');", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'function' but got 'string'."); |
- |
- ExpectJsPass("chrome.tabs.getCurrent(function(){})", |
- "tabs.getCurrent", "[]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, DetectTabLanguage) { |
- ExpectJsFail("chrome.tabs.detectLanguage(32, function(){}, 20);", |
- "Uncaught Error: Too many arguments."); |
- |
- ExpectJsFail("chrome.tabs.detectLanguage('abc', function(){});", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'integer' but got 'string'."); |
- |
- ExpectJsFail("chrome.tabs.detectLanguage(1, 1);", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Expected 'function' but got 'integer'."); |
- |
- ExpectJsPass("chrome.tabs.detectLanguage(null, function(){})", |
- "tabs.detectLanguage", "[null]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, GetSelectedTab) { |
- ExpectJsFail("chrome.tabs.getSelected(32, function(){}, 20);", |
- "Uncaught Error: Too many arguments."); |
- |
- ExpectJsFail("chrome.tabs.getSelected(32);", |
- "Uncaught Error: Parameter 1 is required."); |
- |
- ExpectJsFail("chrome.tabs.getSelected('abc', function(){});", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'integer' but got 'string'."); |
- |
- ExpectJsFail("chrome.tabs.getSelected(1, 1);", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Expected 'function' but got 'integer'."); |
- |
- ExpectJsPass("chrome.tabs.getSelected(2, function(){})", |
- "tabs.getSelected", "[2]"); |
- |
- ExpectJsPass("chrome.tabs.getSelected(null, function(){})", |
- "tabs.getSelected", "[null]"); |
-} |
- |
- |
-TEST_F(ExtensionAPIClientTest, GetAllTabsInWindow) { |
- ExpectJsFail("chrome.tabs.getAllInWindow(42, function(){}, 'asd');", |
- "Uncaught Error: Too many arguments."); |
- |
- ExpectJsFail("chrome.tabs.getAllInWindow(32);", |
- "Uncaught Error: Parameter 1 is required."); |
- |
- ExpectJsFail("chrome.tabs.getAllInWindow(1, 1);", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Expected 'function' but got 'integer'."); |
- |
- ExpectJsFail("chrome.tabs.getAllInWindow('asd', function(){});", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'integer' but got 'string'."); |
- |
- ExpectJsPass("chrome.tabs.getAllInWindow(32, function(){})", |
- "tabs.getAllInWindow", "[32]"); |
- |
- ExpectJsPass("chrome.tabs.getAllInWindow(undefined, function(){})", |
- "tabs.getAllInWindow", "[null]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, CreateTab) { |
- ExpectJsFail("chrome.tabs.create({windowId: 'foo'}, function(){});", |
- "Uncaught Error: Invalid value for argument 0. Property " |
- "'windowId': Expected 'integer' but got 'string'."); |
- ExpectJsFail("chrome.tabs.create({url: 42}, function(){});", |
- "Uncaught Error: Invalid value for argument 0. Property " |
- "'url': Expected 'string' but got 'integer'."); |
- ExpectJsFail("chrome.tabs.create({foo: 42}, function(){});", |
- "Uncaught Error: Invalid value for argument 0. Property " |
- "'foo': Unexpected property."); |
- |
- ExpectJsPass("chrome.tabs.create({" |
- " url:'http://www.google.com/'," |
- " selected:true," |
- " index: 2," |
- " windowId:4" |
- "})", |
- "tabs.create", |
- "[{\"url\":\"http://www.google.com/\"," |
- "\"selected\":true," |
- "\"index\":2," |
- "\"windowId\":4}]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, UpdateTab) { |
- ExpectJsFail("chrome.tabs.update(null);", |
- "Uncaught Error: Parameter 0 is required."); |
- ExpectJsFail("chrome.tabs.update(42, {selected: 'foo'});", |
- "Uncaught Error: Invalid value for argument 1. Property " |
- "'selected': Expected 'boolean' but got 'string'."); |
- ExpectJsFail("chrome.tabs.update(42, {url: 42});", |
- "Uncaught Error: Invalid value for argument 1. Property " |
- "'url': Expected 'string' but got 'integer'."); |
- |
- ExpectJsPass("chrome.tabs.update(42, {" |
- " url:'http://www.google.com/'," |
- " selected:true" |
- "})", |
- "tabs.update", |
- "[42," |
- "{\"url\":\"http://www.google.com/\"," |
- "\"selected\":true}]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, MoveTab) { |
- ExpectJsFail("chrome.tabs.move(null);", |
- "Uncaught Error: Parameter 0 is required."); |
- ExpectJsFail("chrome.tabs.move(42, {index: 'foo'});", |
- "Uncaught Error: Invalid value for argument 1. Property " |
- "'index': Expected 'integer' but got 'string'."); |
- ExpectJsFail("chrome.tabs.move(42, {index: 3, windowId: 'foo'});", |
- "Uncaught Error: Invalid value for argument 1. Property " |
- "'windowId': Expected 'integer' but got 'string'."); |
- |
- ExpectJsPass("chrome.tabs.move(42, {" |
- " index:3," |
- " windowId:21" |
- "})", |
- "tabs.move", |
- "[42," |
- "{\"index\":3," |
- "\"windowId\":21}]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, RemoveTab) { |
- ExpectJsFail("chrome.tabs.remove(32, function(){}, 20);", |
- "Uncaught Error: Too many arguments."); |
- |
- |
- ExpectJsFail("chrome.tabs.remove('abc', function(){});", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'integer' but got 'string'."); |
- |
- ExpectJsFail("chrome.tabs.remove(1, 1);", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Expected 'function' but got 'integer'."); |
- |
- ExpectJsPass("chrome.tabs.remove(2, function(){})", |
- "tabs.remove", "[2]"); |
- |
- ExpectJsPass("chrome.tabs.remove(2)", |
- "tabs.remove", "[2]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, CaptureVisibleTab) { |
- ExpectJsFail("chrome.tabs.captureVisibleTab(0);", |
- "Uncaught Error: Parameter 2 is required."); |
- |
- ExpectJsFail("chrome.tabs.captureVisibleTab(0, null);", |
- "Uncaught Error: Parameter 2 is required."); |
- |
- ExpectJsFail("chrome.tabs.captureVisibleTab(null, {});", |
- "Uncaught Error: Parameter 2 is required."); |
- |
- ExpectJsFail("chrome.tabs.captureVisibleTab(function(){}, 0)", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'integer' but got 'function'."); |
- |
- // Use old signiture. Check that a null value of the options paramenter |
- // is added. |
- ExpectJsPass("chrome.tabs.captureVisibleTab(null, function(img){});", |
- "tabs.captureVisibleTab", "[null, null]"); |
- |
- ExpectJsPass("chrome.tabs.captureVisibleTab(1, function(img){});", |
- "tabs.captureVisibleTab", "[1, null]"); |
- |
- ExpectJsPass("chrome.tabs.captureVisibleTab(null, null, function(img){});", |
- "tabs.captureVisibleTab", "[null, null]"); |
- |
- ExpectJsPass("chrome.tabs.captureVisibleTab(" |
- "null, undefined, function(img){});", |
- "tabs.captureVisibleTab", "[null, null]"); |
- |
- ExpectJsPass("chrome.tabs.captureVisibleTab(null, {}, function(img){});", |
- "tabs.captureVisibleTab", "[null, {}]"); |
- |
- ExpectJsFail("chrome.tabs.captureVisibleTab(null, 42, function(img){});", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Expected 'object' but got 'integer'."); |
- |
- ExpectJsPass("chrome.tabs.captureVisibleTab(" |
- "null, {\"format\": \"jpeg\"}, function(img){});", |
- "tabs.captureVisibleTab", "[null, {\"format\": \"jpeg\"}]"); |
- |
- ExpectJsPass("chrome.tabs.captureVisibleTab(" |
- "null, {\"quality\": 100}, function(img){});", |
- "tabs.captureVisibleTab", "[null, {\"quality\": 100}]"); |
- |
- ExpectJsFail("chrome.tabs.captureVisibleTab(" |
- "null, {\"quality\": 101}, function(img){});", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Property 'quality': Value must not be greater than 100."); |
- |
- ExpectJsFail("chrome.tabs.captureVisibleTab(" |
- "null, {'not_a_param': 'jpeg'}, function(img){});", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Property 'not_a_param': Unexpected property."); |
- |
- ExpectJsFail("chrome.tabs.captureVisibleTab(" |
- "null, {'format': 'invalid'}, function(img){});", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Property 'format': Value must be one of: [jpeg, png]."); |
- |
- ExpectJsFail("chrome.tabs.captureVisibleTab(" |
- "null, {'format': 42}, function(img){});", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Property 'format': Value must be one of: [jpeg, png]."); |
-} |
- |
-// Bookmark API tests |
-// TODO(erikkay) add more variations here |
- |
-TEST_F(ExtensionAPIClientTest, CreateBookmark) { |
- ExpectJsFail( |
- "chrome.bookmarks.create({parentId:0, title:0}, function(){})", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Property 'parentId': Expected 'string' but got 'integer', " |
- "Property 'title': Expected 'string' but got 'integer'."); |
- |
- ExpectJsPass( |
- "chrome.bookmarks.create({parentId:'0', title:'x'}, function(){})", |
- "bookmarks.create", |
- "[{\"parentId\":\"0\",\"title\":\"x\"}]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, GetBookmarks) { |
- ExpectJsPass("chrome.bookmarks.get('0', function(){});", |
- "bookmarks.get", |
- "[\"0\"]"); |
- ExpectJsPass("chrome.bookmarks.get(['0','1','2','3'], function(){});", |
- "bookmarks.get", |
- "[[\"0\",\"1\",\"2\",\"3\"]]"); |
- ExpectJsFail("chrome.bookmarks.get(null, function(){});", |
- "Uncaught Error: Parameter 0 is required."); |
- // TODO(erikkay) This is succeeding, when it should fail. |
- // BUG=13719 |
-#if 0 |
- ExpectJsFail("chrome.bookmarks.get({}, function(){});", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'array' but got 'object'."); |
-#endif |
-} |
- |
-TEST_F(ExtensionAPIClientTest, GetBookmarkChildren) { |
- ExpectJsPass("chrome.bookmarks.getChildren('42', function(){});", |
- "bookmarks.getChildren", |
- "[\"42\"]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, GetBookmarkRecent) { |
- ExpectJsPass("chrome.bookmarks.getRecent(5, function(){});", |
- "bookmarks.getRecent", |
- "[5]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, GetBookmarkTree) { |
- ExpectJsPass("chrome.bookmarks.getTree(function(){});", |
- "bookmarks.getTree", |
- "[]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, SearchBookmarks) { |
- ExpectJsPass("chrome.bookmarks.search('hello',function(){});", |
- "bookmarks.search", |
- "[\"hello\"]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, RemoveBookmark) { |
- ExpectJsPass("chrome.bookmarks.remove('42');", |
- "bookmarks.remove", |
- "[\"42\"]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, RemoveBookmarkTree) { |
- ExpectJsPass("chrome.bookmarks.removeTree('42');", |
- "bookmarks.removeTree", |
- "[\"42\"]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, MoveBookmark) { |
- ExpectJsPass("chrome.bookmarks.move('42',{parentId:'1',index:0});", |
- "bookmarks.move", |
- "[\"42\",{\"parentId\":\"1\",\"index\":0}]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, SetBookmarkTitle) { |
- ExpectJsPass("chrome.bookmarks.update('42',{title:'x'});", |
- "bookmarks.update", |
- "[\"42\",{\"title\":\"x\"}]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, EnablePageAction) { |
- // Basic old-school enablePageAction call. |
- ExpectJsPass("chrome.pageActions.enableForTab(" |
- "'dummy', {tabId: 0, url: 'http://foo/'});", |
- "pageActions.enableForTab", |
- "[\"dummy\",{\"tabId\":0,\"url\":\"http://foo/\"}]"); |
- // Try both optional parameters (title and iconId). |
- ExpectJsPass("chrome.pageActions.enableForTab(" |
- "'dummy', {tabId: 0, url: 'http://foo/'," |
- "title: 'a', iconId: 0});", |
- "pageActions.enableForTab", |
- "[\"dummy\",{\"tabId\":0,\"url\":\"http://foo/\"," |
- "\"title\":\"a\",\"iconId\":0}]"); |
- |
- // Now try disablePageAction. |
- ExpectJsPass("chrome.pageActions.disableForTab(" |
- "'dummy', {tabId: 0, url: 'http://foo/'});", |
- "pageActions.disableForTab", |
- "[\"dummy\",{\"tabId\":0,\"url\":\"http://foo/\"}]"); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, ExpandToolstrip) { |
- ExpectJsPass("chrome.toolstrip.expand({height:100, url:'http://foo/'})", |
- "toolstrip.expand", |
- "[{\"height\":100,\"url\":\"http://foo/\"}]"); |
- ExpectJsPass("chrome.toolstrip.expand({height:100}, null)", |
- "toolstrip.expand", |
- "[{\"height\":100}]"); |
- ExpectJsPass("chrome.toolstrip.expand({height:100,url:'http://foo/'}, " |
- "function(){})", |
- "toolstrip.expand", |
- "[{\"height\":100,\"url\":\"http://foo/\"}]"); |
- |
- |
- ExpectJsFail("chrome.toolstrip.expand()", |
- "Uncaught Error: Parameter 0 is required."); |
- ExpectJsFail("chrome.toolstrip.expand(1)", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'object' but got 'integer'."); |
- ExpectJsFail("chrome.toolstrip.expand({height:'100', url:'http://foo/'})", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Property 'height': " |
- "Expected 'integer' but got 'string'."); |
- ExpectJsFail("chrome.toolstrip.expand({height:100,url:100})", |
- "Uncaught Error: Invalid value for argument 0. Property 'url': " |
- "Expected 'string' but got 'integer'."); |
- ExpectJsFail("chrome.toolstrip.expand({height:100,'url':'http://foo/'}, 32)", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Expected 'function' but got 'integer'."); |
-} |
- |
-TEST_F(ExtensionAPIClientTest, CollapseToolstrip) { |
- ExpectJsPass("chrome.toolstrip.collapse({url:'http://foo/'})", |
- "toolstrip.collapse", |
- "[{\"url\":\"http://foo/\"}]"); |
- ExpectJsPass("chrome.toolstrip.collapse(null)", |
- "toolstrip.collapse", |
- "[null]"); |
- ExpectJsPass("chrome.toolstrip.collapse({url:'http://foo/'}, function(){})", |
- "toolstrip.collapse", |
- "[{\"url\":\"http://foo/\"}]"); |
- |
- ExpectJsFail("chrome.toolstrip.collapse(1)", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'object' but got 'integer'."); |
- ExpectJsFail("chrome.toolstrip.collapse(100)", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'object' but got 'integer'."); |
- ExpectJsFail("chrome.toolstrip.collapse({url:'http://foo/'}, 32)", |
- "Uncaught Error: Invalid value for argument 1. " |
- "Expected 'function' but got 'integer'."); |
-} |
- |
-// I18N API |
-TEST_F(ExtensionAPIClientTest, GetAcceptLanguages) { |
- ExpectJsFail("chrome.i18n.getAcceptLanguages(32, function(){})", |
- "Uncaught Error: Too many arguments."); |
- |
- ExpectJsFail("chrome.i18n.getAcceptLanguages()", |
- "Uncaught Error: Parameter 0 is required."); |
- |
- ExpectJsFail("chrome.i18n.getAcceptLanguages('abc')", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'function' but got 'string'."); |
- |
- ExpectJsPass("chrome.i18n.getAcceptLanguages(function(){})", |
- "i18n.getAcceptLanguages", "[]"); |
-} |
- |
-// TODO(cira): re-enable when we get validation going for |
-// renderer_process_bindings.js |
-TEST_F(ExtensionAPIClientTest, DISABLED_GetL10nMessage) { |
- ExpectJsFail("chrome.i18n.getMessage()", |
- "Uncaught Error: Parameter 0 is required."); |
- |
- ExpectJsFail("chrome.i18n.getMessage(1)", |
- "Uncaught Error: Invalid value for argument 0. " |
- "Expected 'string' but got 'integer'."); |
- |
- ExpectJsFail("chrome.i18n.getMessage('name', [])", |
- "Uncaught Error: Invalid value for argument 1. Value does not " |
- "match any valid type choices."); |
- |
- ExpectJsFail("chrome.i18n.getMessage('name', ['p1', 'p2', 'p3', 'p4', 'p5', " |
- "'p6', 'p7', 'p8', 'p9', 'p10'])", |
- "Uncaught Error: Invalid value for argument 1. Value does not " |
- "match any valid type choices."); |
-} |