Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / net / proxy / proxy_config_service_android.cc
index d27bc5a..50407fe 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <sys/system_properties.h>
 
+#include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
 #include "base/basictypes.h"
 #include "base/bind.h"
@@ -162,6 +163,7 @@ std::string GetJavaProperty(const std::string& property) {
 void CreateStaticProxyConfig(const std::string& host,
                              int port,
                              const std::string& pac_url,
+                             const std::vector<std::string>& exclusion_list,
                              ProxyConfig* config) {
   if (!pac_url.empty()) {
     config->set_pac_url(GURL(pac_url));
@@ -169,6 +171,16 @@ void CreateStaticProxyConfig(const std::string& host,
   } else if (port != 0) {
     std::string rules = base::StringPrintf("%s:%d", host.c_str(), port);
     config->proxy_rules().ParseFromString(rules);
+    config->proxy_rules().bypass_rules.Clear();
+
+    std::vector<std::string>::const_iterator it;
+    for (it = exclusion_list.begin(); it != exclusion_list.end(); ++it) {
+      std::string pattern;
+      base::TrimWhitespaceASCII(*it, base::TRIM_ALL, &pattern);
+      if (pattern.empty())
+          continue;
+      config->proxy_rules().bypass_rules.AddRuleForHostname("", pattern, -1);
+    }
   } else {
     *config = ProxyConfig::CreateDirect();
   }
@@ -185,7 +197,8 @@ class ProxyConfigServiceAndroid::Delegate
       : jni_delegate_(this),
         network_task_runner_(network_task_runner),
         jni_task_runner_(jni_task_runner),
-        get_property_callback_(get_property_callback) {
+        get_property_callback_(get_property_callback),
+        exclude_pac_url_(false) {
   }
 
   void SetupJNI() {
@@ -255,16 +268,26 @@ class ProxyConfigServiceAndroid::Delegate
   // Called on the JNI thread.
   void ProxySettingsChangedTo(const std::string& host,
                               int port,
-                              const std::string& pac_url) {
+                              const std::string& pac_url,
+                              const std::vector<std::string>& exclusion_list) {
     DCHECK(OnJNIThread());
     ProxyConfig proxy_config;
-    CreateStaticProxyConfig(host, port, pac_url, &proxy_config);
+    if (exclude_pac_url_) {
+      CreateStaticProxyConfig(host, port, "", exclusion_list, &proxy_config);
+    } else {
+      CreateStaticProxyConfig(host, port, pac_url, exclusion_list,
+          &proxy_config);
+    }
     network_task_runner_->PostTask(
         FROM_HERE,
         base::Bind(
             &Delegate::SetNewConfigOnNetworkThread, this, proxy_config));
   }
 
+  void set_exclude_pac_url(bool enabled) {
+    exclude_pac_url_ = enabled;
+  }
+
  private:
   friend class base::RefCountedThreadSafe<Delegate>;
 
@@ -277,15 +300,19 @@ class ProxyConfigServiceAndroid::Delegate
                                         jobject jself,
                                         jstring jhost,
                                         jint jport,
-                                        jstring jpac_url) OVERRIDE {
+                                        jstring jpac_url,
+                                        jobjectArray jexclusion_list) override {
       std::string host = ConvertJavaStringToUTF8(env, jhost);
       std::string pac_url;
       if (jpac_url)
         ConvertJavaStringToUTF8(env, jpac_url, &pac_url);
-      delegate_->ProxySettingsChangedTo(host, jport, pac_url);
+      std::vector<std::string> exclusion_list;
+      base::android::AppendJavaStringArrayToStringVector(
+          env, jexclusion_list, &exclusion_list);
+      delegate_->ProxySettingsChangedTo(host, jport, pac_url, exclusion_list);
     }
 
-    virtual void ProxySettingsChanged(JNIEnv* env, jobject self) OVERRIDE {
+    virtual void ProxySettingsChanged(JNIEnv* env, jobject self) override {
       delegate_->ProxySettingsChanged();
     }
 
@@ -327,6 +354,7 @@ class ProxyConfigServiceAndroid::Delegate
   scoped_refptr<base::SequencedTaskRunner> jni_task_runner_;
   GetPropertyCallback get_property_callback_;
   ProxyConfig proxy_config_;
+  bool exclude_pac_url_;
 
   DISALLOW_COPY_AND_ASSIGN(Delegate);
 };
@@ -349,6 +377,10 @@ bool ProxyConfigServiceAndroid::Register(JNIEnv* env) {
   return RegisterNativesImpl(env);
 }
 
+void ProxyConfigServiceAndroid::set_exclude_pac_url(bool enabled) {
+  delegate_->set_exclude_pac_url(enabled);
+}
+
 void ProxyConfigServiceAndroid::AddObserver(Observer* observer) {
   delegate_->AddObserver(observer);
 }