15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/pickle.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "extensions/common/permissions/permissions_info.h" 10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/socket_permission.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/common/permissions/socket_permission_data.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::SocketPermissionRequest; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParseTest(const std::string& permission, 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& expected_result) { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketPermissionData data; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(data.ParseForTest(permission)) << "Parse permission \"" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << permission << "\" failed."; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_result, data.GetAsStringForTest()); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(SocketPermissionTest, General) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketPermissionData data1, data2; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(data1.ParseForTest("tcp-connect")); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(data2.ParseForTest("tcp-connect")); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(data1 == data2); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(data1 < data2); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(data1.ParseForTest("tcp-connect")); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(data2.ParseForTest("tcp-connect:www.example.com")); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(data1 == data2); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(data1 < data2); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(SocketPermissionTest, Parse) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketPermissionData data; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest(std::string())); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("*")); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("\00\00*")); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("\01*")); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("tcp-connect:www.example.com:-1")); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("tcp-connect:www.example.com:65536")); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("tcp-connect:::")); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("tcp-connect::0")); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("tcp-connect: www.exmaple.com: 99 ")); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("tcp-connect:*.exmaple.com :99")); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("tcp-connect:*.exmaple.com: 99")); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("tcp-connect:*.exmaple.com:99 ")); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("tcp-connect:\t*.exmaple.com:99")); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.ParseForTest("tcp-connect:\n*.exmaple.com:99")); 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(data.ParseForTest("resolve-host:exmaple.com:99")); 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(data.ParseForTest("resolve-host:127.0.0.1")); 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(data.ParseForTest("resolve-host:")); 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(data.ParseForTest("resolve-proxy:exmaple.com:99")); 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(data.ParseForTest("resolve-proxy:exmaple.com")); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect", "tcp-connect:*:*"); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-listen", "tcp-listen:*:*"); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-bind", "udp-bind:*:*"); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-send-to", "udp-send-to:*:*"); 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ParseTest("resolve-host", "resolve-host"); 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ParseTest("resolve-proxy", "resolve-proxy"); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect:", "tcp-connect:*:*"); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-listen:", "tcp-listen:*:*"); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-bind:", "udp-bind:*:*"); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-send-to:", "udp-send-to:*:*"); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect::", "tcp-connect:*:*"); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-listen::", "tcp-listen:*:*"); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-bind::", "udp-bind:*:*"); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-send-to::", "udp-send-to:*:*"); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect:*", "tcp-connect:*:*"); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-listen:*", "tcp-listen:*:*"); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-bind:*", "udp-bind:*:*"); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-send-to:*", "udp-send-to:*:*"); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect:*:", "tcp-connect:*:*"); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-listen:*:", "tcp-listen:*:*"); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-bind:*:", "udp-bind:*:*"); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-send-to:*:", "udp-send-to:*:*"); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect::*", "tcp-connect:*:*"); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-listen::*", "tcp-listen:*:*"); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-bind::*", "udp-bind:*:*"); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-send-to::*", "udp-send-to:*:*"); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect:www.example.com", "tcp-connect:www.example.com:*"); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-listen:www.example.com", "tcp-listen:www.example.com:*"); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-bind:www.example.com", "udp-bind:www.example.com:*"); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-send-to:www.example.com", "udp-send-to:www.example.com:*"); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-send-to:wWW.ExAmPlE.cOm", "udp-send-to:www.example.com:*"); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect:.example.com", "tcp-connect:*.example.com:*"); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-listen:.example.com", "tcp-listen:*.example.com:*"); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-bind:.example.com", "udp-bind:*.example.com:*"); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-send-to:.example.com", "udp-send-to:*.example.com:*"); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect:*.example.com", "tcp-connect:*.example.com:*"); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-listen:*.example.com", "tcp-listen:*.example.com:*"); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-bind:*.example.com", "udp-bind:*.example.com:*"); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-send-to:*.example.com", "udp-send-to:*.example.com:*"); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect::99", "tcp-connect:*:99"); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-listen::99", "tcp-listen:*:99"); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-bind::99", "udp-bind:*:99"); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("udp-send-to::99", "udp-send-to:*:99"); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect:www.example.com", "tcp-connect:www.example.com:*"); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParseTest("tcp-connect:*.example.com:99", "tcp-connect:*.example.com:99"); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(SocketPermissionTest, Match) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SocketPermissionData data; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<SocketPermission::CheckParam> param; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(data.ParseForTest("tcp-connect")); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "www.example.com", 80)); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(data.ParseForTest("udp-send-to::8800")); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "www.example.com", 8800)); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "smtp.example.com", 8800)); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(data.ParseForTest("udp-send-to:*.example.com:8800")); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "www.example.com", 8800)); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "smtp.example.com", 8800)); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "SMTP.example.com", 8800)); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "www.google.com", 8800)); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "wwwexample.com", 8800)); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(data.ParseForTest("udp-send-to:*.ExAmPlE.cOm:8800")); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "www.example.com", 8800)); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "smtp.example.com", 8800)); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "SMTP.example.com", 8800)); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "www.google.com", 8800)); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(data.ParseForTest("udp-bind::8800")); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_BIND, "127.0.0.1", 8800)); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_BIND, "127.0.0.1", 8888)); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "www.google.com", 8800)); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not wildcard part of ip address. 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(data.ParseForTest("tcp-connect:*.168.0.1:8800")); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::TCP_CONNECT, "192.168.0.1", 8800)); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(data.ParseForTest("udp-multicast-membership:*")); 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(data.ParseForTest("udp-multicast-membership:*:*")); 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(data.ParseForTest("udp-multicast-membership")); 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_BIND, "127.0.0.1", 8800)); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_BIND, "127.0.0.1", 8888)); 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80)); 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_SEND_TO, "www.google.com", 8800)); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_MULTICAST_MEMBERSHIP, "127.0.0.1", 35)); 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(data.ParseForTest("resolve-host")); 226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch param.reset(new SocketPermission::CheckParam( 227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::RESOLVE_HOST, "www.example.com", 80)); 228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(data.Check(param.get())); 229eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch param.reset(new SocketPermission::CheckParam( 230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::RESOLVE_HOST, "www.example.com", 8080)); 231eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(data.Check(param.get())); 232eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch param.reset(new SocketPermission::CheckParam( 233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_BIND, "127.0.0.1", 8800)); 234eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(data.Check(param.get())); 235eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch param.reset(new SocketPermission::CheckParam( 236eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::TCP_CONNECT, "127.0.0.1", 8800)); 237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(data.Check(param.get())); 238eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 239eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(data.ParseForTest("resolve-proxy")); 240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch param.reset(new SocketPermission::CheckParam( 241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::RESOLVE_PROXY, "www.example.com", 80)); 242eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(data.Check(param.get())); 243eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch param.reset(new SocketPermission::CheckParam( 244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::RESOLVE_PROXY, "www.example.com", 8080)); 245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(data.Check(param.get())); 246eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch param.reset(new SocketPermission::CheckParam( 247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::UDP_BIND, "127.0.0.1", 8800)); 248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(data.Check(param.get())); 249eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch param.reset(new SocketPermission::CheckParam( 250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SocketPermissionRequest::TCP_CONNECT, "127.0.0.1", 8800)); 251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(data.Check(param.get())); 252d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 253d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(data.ParseForTest("network-state")); 254d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 255d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SocketPermissionRequest::NETWORK_STATE, std::string(), 0)); 256d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(data.Check(param.get())); 257d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 258d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SocketPermissionRequest::UDP_BIND, "127.0.0.1", 8800)); 259d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 260d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) param.reset(new SocketPermission::CheckParam( 261d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SocketPermissionRequest::TCP_CONNECT, "127.0.0.1", 8800)); 262d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_FALSE(data.Check(param.get())); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(SocketPermissionTest, IPC) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const APIPermissionInfo* permission_info = 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message m; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<APIPermission> permission1( 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permission_info->CreateAPIPermission()); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<APIPermission> permission2( 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permission_info->CreateAPIPermission()); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permission1->Write(&m); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator iter(m); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permission2->Read(&m, &iter); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(permission1->Equal(permission2.get())); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message m; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<APIPermission> permission1( 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permission_info->CreateAPIPermission()); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<APIPermission> permission2( 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permission_info->CreateAPIPermission()); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::ListValue> value(new base::ListValue()); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value->AppendString("tcp-connect:*.example.com:80"); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value->AppendString("udp-bind::8080"); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value->AppendString("udp-send-to::8888"); 296c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL)); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(permission1->Equal(permission2.get())); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permission1->Write(&m); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator iter(m); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permission2->Read(&m, &iter); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(permission1->Equal(permission2.get())); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(SocketPermissionTest, Value) { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const APIPermissionInfo* permission_info = 3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<APIPermission> permission1(permission_info->CreateAPIPermission()); 3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<APIPermission> permission2(permission_info->CreateAPIPermission()); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::ListValue> value(new base::ListValue()); 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value->AppendString("tcp-connect:*.example.com:80"); 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value->AppendString("udp-bind::8080"); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value->AppendString("udp-send-to::8888"); 318c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL)); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(permission1->Equal(permission2.get())); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> vtmp(permission1->ToValue()); 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(vtmp); 324c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_TRUE(permission2->FromValue(vtmp.get(), NULL, NULL)); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(permission1->Equal(permission2.get())); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 331