[ChromeDriver] Fix ExecuteScript when script returns no result

V8 CL https://crrev.com/c/834669 changed the behavior of the JavaScript
engine. When it evaluates a script that returns no result, the result
object no longer contains a 'value' property, while previously, the
result contained a 'value' property with a value of null. After this CL
was merged into Chromium as https://crrev.com/525272, ChromeDriver
generates an error when it can't find the 'value' property.

This CL modifies ChromeDriver to recognize that 'value' is optional.

Bug: chromedriver:2191
Change-Id: I3cf65fb5824c161f3b1b0d982884d070a4a76b41
Reviewed-on: https://chromium-review.googlesource.com/837488
Reviewed-by: Jonathon Kereliuk <kereliuk@chromium.org>
Commit-Queue: Jonathon Kereliuk <kereliuk@chromium.org>
Commit-Queue: John Chen <johnchen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#525440}
diff --git a/chrome/test/chromedriver/chrome/web_view_impl.cc b/chrome/test/chromedriver/chrome/web_view_impl.cc
index af8464c..ea4baf6 100644
--- a/chrome/test/chromedriver/chrome/web_view_impl.cc
+++ b/chrome/test/chromedriver/chrome/web_view_impl.cc
@@ -929,8 +929,8 @@
   }
   const base::Value* unscoped_value;
   if (!dict->Get("value", &unscoped_value)) {
-    return Status(kUnknownError,
-                  "call function result missing 'value'");
+    // Missing 'value' indicates the JavaScript code didn't return a value.
+    return Status(kOk);
   }
   result->reset(unscoped_value->DeepCopy());
   return Status(kOk);