Snap for 5637134 from e195da9bbfb3f0d9d7366ab0b5701ef52fc8f97f to qt-release

Change-Id: I903fd2d1e3f960da68e6e39ad00c80be465aa9a7
diff --git a/src/proxy_resolver_v8.cc b/src/proxy_resolver_v8.cc
index 227fea3..289102e 100644
--- a/src/proxy_resolver_v8.cc
+++ b/src/proxy_resolver_v8.cc
@@ -760,9 +760,11 @@
   if (script_data.length() == 0)
     return ERR_PAC_SCRIPT_FAILED;
 
-  // To help debugging v8 initialization issues, uncomment the following lines
-  // static const char kOptions[] = "--log_all --print_all_exceptions";
-  // v8::V8::SetFlagsFromString(kOptions, strlen(kOptions));
+  // To help debugging v8 initialization issues, add "--log_all --print_all_exceptions"
+  // to the options
+  // Disable JIT
+  static const char kNoOpt[] = "--no-opt";
+  v8::V8::SetFlagsFromString(kNoOpt, strlen(kNoOpt));
 
   // Try parsing the PAC script.
   ArrayBufferAllocator allocator;
diff --git a/test/js-unittest/b_132073833.js b/test/js-unittest/b_132073833.js
new file mode 100644
index 0000000..79d1967
--- /dev/null
+++ b/test/js-unittest/b_132073833.js
@@ -0,0 +1,21 @@
+function FindProxyForURL(url, host){
+    function opt() {
+        opt['x'] = 1.1;
+        try {
+            Object.create(object);
+        } catch (e) {
+        }
+
+        for (let i = 0; i < 100000; i++) {
+
+        }
+    }
+
+    opt();
+    object = opt;
+    opt();
+
+    return "DIRECT";
+}
+
+var object;
\ No newline at end of file
diff --git a/test/proxy_resolver_v8_unittest.cc b/test/proxy_resolver_v8_unittest.cc
index b549cda..66b2a23 100644
--- a/test/proxy_resolver_v8_unittest.cc
+++ b/test/proxy_resolver_v8_unittest.cc
@@ -629,5 +629,19 @@
   EXPECT_EQ("DIRECT", proxies[0]);
 }
 
+TEST(ProxyResolverV8Test, B_132073833) {
+  ProxyResolverV8WithMockBindings resolver(new MockJSBindings());
+  int result = resolver.SetPacScript(SCRIPT(B_132073833_JS));
+  EXPECT_EQ(OK, result);
+
+  // Execute FindProxyForURL().
+  result = resolver.GetProxyForURL(kQueryUrl, kQueryHost, &kResults);
+
+  EXPECT_EQ(OK, result);
+  std::vector<std::string> proxies = string16ToProxyList(kResults);
+  EXPECT_EQ(1U, proxies.size());
+  EXPECT_EQ("DIRECT", proxies[0]);
+}
+
 }  // namespace
 }  // namespace net
diff --git a/test/proxy_test_script.h b/test/proxy_test_script.h
index 092e262..0d1b77e 100644
--- a/test/proxy_test_script.h
+++ b/test/proxy_test_script.h
@@ -4,6 +4,30 @@
 #ifndef PROXY_TEST_SCRIPT_H_
 #define PROXY_TEST_SCRIPT_H_
 
+#define B_132073833_JS \
+  u""\
+  "function FindProxyForURL(url, host){\n" \
+  "    function opt() {\n" \
+  "        opt['x'] = 1.1;\n" \
+  "        try {\n" \
+  "            Object.create(object);\n" \
+  "        } catch (e) {\n" \
+  "        }\n" \
+  "\n" \
+  "        for (let i = 0; i < 100000; i++) {\n" \
+  "\n" \
+  "        }\n" \
+  "    }\n" \
+  "\n" \
+  "    opt();\n" \
+  "    object = opt;\n" \
+  "    opt();\n" \
+  "\n" \
+  "    return \"DIRECT\";\n" \
+  "}\n" \
+  "\n" \
+  "var object;\n" \
+
 #define BINDING_FROM_GLOBAL_JS \
   u""\
   "// Calls a bindings outside of FindProxyForURL(). This causes the code to\n" \