Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / net / proxy / proxy_config_unittest.cc
index 4b041b3..1554419 100644 (file)
@@ -308,7 +308,7 @@ TEST(ProxyConfigTest, ParseProxyRules) {
 
   ProxyConfig config;
 
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
+  for (size_t i = 0; i < arraysize(tests); ++i) {
     config.proxy_rules().ParseFromString(tests[i].proxy_rules);
 
     EXPECT_EQ(tests[i].type, config.proxy_rules().type);
@@ -353,5 +353,76 @@ TEST(ProxyConfigTest, ProxyRulesSetBypassFlag) {
   EXPECT_FALSE(result.did_bypass_proxy());
 }
 
+static const char kWsUrl[] = "ws://example.com/echo";
+static const char kWssUrl[] = "wss://example.com/echo";
+
+class ProxyConfigWebSocketTest : public ::testing::Test {
+ protected:
+  void ParseFromString(const std::string& rules) {
+    rules_.ParseFromString(rules);
+  }
+  void Apply(const GURL& gurl) { rules_.Apply(gurl, &info_); }
+  std::string ToPacString() const { return info_.ToPacString(); }
+
+  static GURL WsUrl() { return GURL(kWsUrl); }
+  static GURL WssUrl() { return GURL(kWssUrl); }
+
+  ProxyConfig::ProxyRules rules_;
+  ProxyInfo info_;
+};
+
+// If a single proxy is set for all protocols, WebSocket uses it.
+TEST_F(ProxyConfigWebSocketTest, UsesProxy) {
+  ParseFromString("proxy:3128");
+  Apply(WsUrl());
+  EXPECT_EQ("PROXY proxy:3128", ToPacString());
+}
+
+// See RFC6455 Section 4.1. item 3, "_Proxy Usage_".
+TEST_F(ProxyConfigWebSocketTest, PrefersSocks) {
+  ParseFromString(
+      "http=proxy:3128 ; https=sslproxy:3128 ; socks=socksproxy:1080");
+  Apply(WsUrl());
+  EXPECT_EQ("SOCKS socksproxy:1080", ToPacString());
+}
+
+TEST_F(ProxyConfigWebSocketTest, PrefersHttpsToHttp) {
+  ParseFromString("http=proxy:3128 ; https=sslproxy:3128");
+  Apply(WssUrl());
+  EXPECT_EQ("PROXY sslproxy:3128", ToPacString());
+}
+
+TEST_F(ProxyConfigWebSocketTest, PrefersHttpsEvenForWs) {
+  ParseFromString("http=proxy:3128 ; https=sslproxy:3128");
+  Apply(WsUrl());
+  EXPECT_EQ("PROXY sslproxy:3128", ToPacString());
+}
+
+TEST_F(ProxyConfigWebSocketTest, PrefersHttpToDirect) {
+  ParseFromString("http=proxy:3128");
+  Apply(WssUrl());
+  EXPECT_EQ("PROXY proxy:3128", ToPacString());
+}
+
+TEST_F(ProxyConfigWebSocketTest, IgnoresFtpProxy) {
+  ParseFromString("ftp=ftpproxy:3128");
+  Apply(WssUrl());
+  EXPECT_EQ("DIRECT", ToPacString());
+}
+
+TEST_F(ProxyConfigWebSocketTest, ObeysBypassRules) {
+  ParseFromString("http=proxy:3128 ; https=sslproxy:3128");
+  rules_.bypass_rules.AddRuleFromString(".chromium.org");
+  Apply(GURL("wss://codereview.chromium.org/feed"));
+  EXPECT_EQ("DIRECT", ToPacString());
+}
+
+TEST_F(ProxyConfigWebSocketTest, ObeysLocalBypass) {
+  ParseFromString("http=proxy:3128 ; https=sslproxy:3128");
+  rules_.bypass_rules.AddRuleFromString("<local>");
+  Apply(GURL("ws://localhost/feed"));
+  EXPECT_EQ("DIRECT", ToPacString());
+}
+
 }  // namespace
 }  // namespace net