Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1809)

Unified Diff: chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc

Issue 255443002: Implement argument validation for chrome.cast.channel.{open,send} (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase onto upstream Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/api/cast_channel/cast_channel_api_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc
diff --git a/chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc b/chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc
index 3f55b64c82a724bf5ff287bee6efc3980cfd68fa..329e9d01e2ceb619bec901a9885497157a8797cd 100644
--- a/chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc
+++ b/chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc
@@ -8,7 +8,9 @@
#include "chrome/browser/extensions/api/cast_channel/cast_channel_api.h"
#include "chrome/browser/extensions/api/cast_channel/cast_socket.h"
#include "chrome/browser/extensions/extension_apitest.h"
+#include "chrome/browser/extensions/extension_function_test_utils.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/ui/browser.h"
#include "chrome/common/extensions/api/cast_channel.h"
#include "content/public/browser/browser_thread.h"
#include "extensions/common/switches.h"
@@ -23,6 +25,9 @@ using cast_channel::CastSocket;
using cast_channel::ChannelError;
using cast_channel::MessageInfo;
using cast_channel::ReadyState;
+using extensions::Extension;
+
+namespace utils = extension_function_test_utils;
using ::testing::_;
using ::testing::A;
@@ -130,6 +135,22 @@ class CastChannelAPITest : public ExtensionApiTest {
api->OnMessage(cast_socket, message_info);
}
+ extensions::CastChannelOpenFunction* CreateOpenFunction(
+ scoped_refptr<Extension> extension) {
+ extensions::CastChannelOpenFunction* cast_channel_open_function =
+ new extensions::CastChannelOpenFunction;
+ cast_channel_open_function->set_extension(extension.get());
+ return cast_channel_open_function;
+ }
+
+ extensions::CastChannelSendFunction* CreateSendFunction(
+ scoped_refptr<Extension> extension) {
+ extensions::CastChannelSendFunction* cast_channel_send_function =
+ new extensions::CastChannelSendFunction;
+ cast_channel_send_function->set_extension(extension.get());
+ return cast_channel_send_function;
+ }
+
MockCastSocket* mock_cast_socket_;
net::CapturingNetLog capturing_net_log_;
};
@@ -259,3 +280,103 @@ IN_PROC_BROWSER_TEST_F(CastChannelAPITest, MAYBE_TestOpenError) {
EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
}
+IN_PROC_BROWSER_TEST_F(CastChannelAPITest, TestOpenInvalidConnectInfo) {
+ scoped_refptr<Extension> empty_extension(utils::CreateEmptyExtension());
+ scoped_refptr<extensions::CastChannelOpenFunction> cast_channel_open_function;
+
+ // Invalid URL
+ // TODO(mfoltz): Remove this test case when fixing crbug.com/331905
+ cast_channel_open_function = CreateOpenFunction(empty_extension);
+ std::string error(utils::RunFunctionAndReturnError(
+ cast_channel_open_function.get(), "[\"blargh\"]", browser()));
+ EXPECT_EQ(error, "Invalid connect_info (invalid Cast URL blargh)");
+
+ // Wrong type
+ // TODO(mfoltz): Remove this test case when fixing crbug.com/331905
+ cast_channel_open_function = CreateOpenFunction(empty_extension);
+ error = utils::RunFunctionAndReturnError(
+ cast_channel_open_function.get(),
+ "[123]", browser());
+ EXPECT_EQ(error, "Invalid connect_info (unknown type)");
+
+ // Invalid IP address
+ cast_channel_open_function = CreateOpenFunction(empty_extension);
+ error = utils::RunFunctionAndReturnError(
+ cast_channel_open_function.get(),
+ "[{\"ipAddress\": \"invalid_ip\", \"port\": 8009, \"auth\": \"ssl\"}]",
+ browser());
+ EXPECT_EQ(error, "Invalid connect_info (invalid IP address)");
+
+ // Invalid port
+ cast_channel_open_function = CreateOpenFunction(empty_extension);
+ error = utils::RunFunctionAndReturnError(
+ cast_channel_open_function.get(),
+ "[{\"ipAddress\": \"127.0.0.1\", \"port\": -200, \"auth\": \"ssl\"}]",
+ browser());
+ EXPECT_EQ(error, "Invalid connect_info (invalid port)");
+
+ // Auth not set
+ cast_channel_open_function = CreateOpenFunction(empty_extension);
+ error = utils::RunFunctionAndReturnError(
+ cast_channel_open_function.get(),
+ "[{\"ipAddress\": \"127.0.0.1\", \"port\": 8009}]",
+ browser());
+ EXPECT_EQ(error, "connect_info.auth is required");
+}
+
+IN_PROC_BROWSER_TEST_F(CastChannelAPITest, TestSendInvalidMessageInfo) {
+ scoped_refptr<Extension> empty_extension(utils::CreateEmptyExtension());
+ scoped_refptr<extensions::CastChannelSendFunction> cast_channel_send_function;
+
+ // Numbers are not supported
+ cast_channel_send_function = CreateSendFunction(empty_extension);
+ std::string error(utils::RunFunctionAndReturnError(
+ cast_channel_send_function.get(),
+ "[{\"channelId\": 1, \"url\": \"cast://127.0.0.1:8009\", "
+ "\"connectInfo\": "
+ "{\"ipAddress\": \"127.0.0.1\", \"port\": 8009, "
+ "\"auth\": \"ssl\"}, \"readyState\": \"open\"}, "
+ "{\"namespace_\": \"foo\", \"sourceId\": \"src\", "
+ "\"destinationId\": \"dest\", \"data\": 1235}]",
+ browser()));
+ EXPECT_EQ(error, "Invalid type of message_info.data");
+
+ // Missing namespace_
+ cast_channel_send_function = CreateSendFunction(empty_extension);
+ error = utils::RunFunctionAndReturnError(
+ cast_channel_send_function.get(),
+ "[{\"channelId\": 1, \"url\": \"cast://127.0.0.1:8009\", "
+ "\"connectInfo\": "
+ "{\"ipAddress\": \"127.0.0.1\", \"port\": 8009, "
+ "\"auth\": \"ssl\"}, \"readyState\": \"open\"}, "
+ "{\"namespace_\": \"\", \"sourceId\": \"src\", "
+ "\"destinationId\": \"dest\", \"data\": \"data\"}]",
+ browser());
+ EXPECT_EQ(error, "message_info.namespace_ is required");
+
+ // Missing source_id
+ cast_channel_send_function = CreateSendFunction(empty_extension);
+ error = utils::RunFunctionAndReturnError(
+ cast_channel_send_function.get(),
+ "[{\"channelId\": 1, \"url\": \"cast://127.0.0.1:8009\", "
+ "\"connectInfo\": "
+ "{\"ipAddress\": \"127.0.0.1\", \"port\": 8009, "
+ "\"auth\": \"ssl\"}, \"readyState\": \"open\"}, "
+ "{\"namespace_\": \"foo\", \"sourceId\": \"\", "
+ "\"destinationId\": \"dest\", \"data\": \"data\"}]",
+ browser());
+ EXPECT_EQ(error, "message_info.source_id is required");
+
+ // Missing destination_id
+ cast_channel_send_function = CreateSendFunction(empty_extension);
+ error = utils::RunFunctionAndReturnError(
+ cast_channel_send_function.get(),
+ "[{\"channelId\": 1, \"url\": \"cast://127.0.0.1:8009\", "
+ "\"connectInfo\": "
+ "{\"ipAddress\": \"127.0.0.1\", \"port\": 8009, "
+ "\"auth\": \"ssl\"}, \"readyState\": \"open\"}, "
+ "{\"namespace_\": \"foo\", \"sourceId\": \"src\", "
+ "\"destinationId\": \"\", \"data\": \"data\"}]",
+ browser());
+ EXPECT_EQ(error, "message_info.destination_id is required");
+}
« no previous file with comments | « chrome/browser/extensions/api/cast_channel/cast_channel_api_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698