Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1143)

Unified Diff: content/browser/renderer_host/render_view_host_browsertest.cc

Issue 8124024: Applescript: return value from execute javascript command (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: fix rebase mistake so it compiles Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/render_view_host.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/render_view_host_browsertest.cc
diff --git a/content/browser/renderer_host/render_view_host_browsertest.cc b/content/browser/renderer_host/render_view_host_browsertest.cc
index 0bd5577002e51084aad23138f527848900e980bf..0b88d9803c9c12a18ec7a906e5bcdeb46bfb9615 100644
--- a/content/browser/renderer_host/render_view_host_browsertest.cc
+++ b/content/browser/renderer_host/render_view_host_browsertest.cc
@@ -16,144 +16,98 @@
#include "net/base/host_port_pair.h"
#include "net/test/test_server.h"
-typedef std::pair<int, Value*> ExecuteDetailType;
-
-namespace {
-
-// NotificationObserver used to listen for EXECUTE_JAVASCRIPT_RESULT
-// notifications.
-class ExecuteNotificationObserver : public content::NotificationObserver {
- public:
- ExecuteNotificationObserver() : id_(0) {}
-
- virtual void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- id_ = (static_cast<content::Details<ExecuteDetailType > >(details))->first;
- Value* value =
- (static_cast<content::Details<ExecuteDetailType > >(details))->second;
- if (value)
- value_.reset(value->DeepCopy());
- MessageLoopForUI::current()->Quit();
- }
-
- int id() const { return id_; }
-
- Value* value() const { return value_.get(); }
-
- private:
- int id_;
- scoped_ptr<Value> value_;
-
- DISALLOW_COPY_AND_ASSIGN(ExecuteNotificationObserver);
-};
-
-} // namespace
-
class RenderViewHostTest : public InProcessBrowserTest {
public:
- RenderViewHostTest() : last_execute_id_(0) {}
-
- void ExecuteJavascriptAndGetValue(const char* script,
- ExecuteNotificationObserver* out_result) {
- RenderViewHost* rvh =
- browser()->GetSelectedTabContents()->render_view_host();
- ASSERT_TRUE(rvh);
- int execute_id = rvh->ExecuteJavascriptInWebFrameNotifyResult(
- string16(),
- ASCIIToUTF16(script));
- EXPECT_NE(execute_id, last_execute_id_);
- ExecuteNotificationObserver observer;
- ui_test_utils::RegisterAndWait(
- out_result,
- content::NOTIFICATION_EXECUTE_JAVASCRIPT_RESULT,
- content::Source<RenderViewHost>(rvh));
- EXPECT_EQ(execute_id, out_result->id());
- ASSERT_TRUE(out_result->value());
- last_execute_id_ = execute_id;
- }
-
- private:
- int last_execute_id_;
+ RenderViewHostTest() {}
};
-// Makes sure ExecuteJavascriptInWebFrameNotifyResult works.
IN_PROC_BROWSER_TEST_F(RenderViewHostTest,
- ExecuteJavascriptInWebFrameNotifyResult) {
+ ExecuteJavascriptAndGetValue) {
ASSERT_TRUE(test_server()->Start());
GURL empty_url(test_server()->GetURL("files/empty.html"));
ui_test_utils::NavigateToURL(browser(), empty_url);
+ RenderViewHost* rvh =
+ browser()->GetSelectedTabContents()->render_view_host();
+
+ {
+ Value* value = rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("!false;"));
+ EXPECT_EQ(Value::TYPE_BOOLEAN, value->GetType());
+ bool bool_value;
+ EXPECT_TRUE(value->GetAsBoolean(&bool_value));
+ EXPECT_TRUE(bool_value);
+ }
+
// Execute the script 'true' and make sure we get back true.
{
- ExecuteNotificationObserver observer;
- ExecuteJavascriptAndGetValue("true;", &observer);
- EXPECT_EQ(Value::TYPE_BOOLEAN, observer.value()->GetType());
+ Value* value = rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("true;"));
+ EXPECT_EQ(Value::TYPE_BOOLEAN, value->GetType());
bool bool_value;
- EXPECT_TRUE(observer.value()->GetAsBoolean(&bool_value));
+ EXPECT_TRUE(value->GetAsBoolean(&bool_value));
EXPECT_TRUE(bool_value);
}
// Execute the script 'false' and make sure we get back false.
{
- ExecuteNotificationObserver observer;
- ExecuteJavascriptAndGetValue("false;", &observer);
- EXPECT_EQ(Value::TYPE_BOOLEAN, observer.value()->GetType());
+ Value* value = rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("false;"));
+ EXPECT_EQ(Value::TYPE_BOOLEAN, value->GetType());
bool bool_value;
- EXPECT_TRUE(observer.value()->GetAsBoolean(&bool_value));
+ EXPECT_TRUE(value->GetAsBoolean(&bool_value));
EXPECT_FALSE(bool_value);
}
// And now, for something completely different, try a number.
{
- ExecuteNotificationObserver observer;
- ExecuteJavascriptAndGetValue("42;", &observer);
- EXPECT_EQ(Value::TYPE_INTEGER, observer.value()->GetType());
+ Value* value = rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("42;"));
+ EXPECT_EQ(Value::TYPE_INTEGER, value->GetType());
int int_value;
- EXPECT_TRUE(observer.value()->GetAsInteger(&int_value));
+ EXPECT_TRUE(value->GetAsInteger(&int_value));
EXPECT_EQ(42, int_value);
}
// Try a floating point number.
{
- ExecuteNotificationObserver observer;
- ExecuteJavascriptAndGetValue("42.2;", &observer);
- EXPECT_EQ(Value::TYPE_DOUBLE, observer.value()->GetType());
+ Value* value = rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("42.2;"));
+ EXPECT_EQ(Value::TYPE_DOUBLE, value->GetType());
double double_value;
- EXPECT_TRUE(observer.value()->GetAsDouble(&double_value));
+ EXPECT_TRUE(value->GetAsDouble(&double_value));
EXPECT_EQ(42.2, double_value);
}
// Let's check out string.
{
- ExecuteNotificationObserver observer;
- ExecuteJavascriptAndGetValue("\"something completely different\";",
- &observer);
- EXPECT_EQ(Value::TYPE_STRING, observer.value()->GetType());
+ Value* value = rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("\"something completely different\";"));
+ EXPECT_EQ(Value::TYPE_STRING, value->GetType());
std::string string_value;
- EXPECT_TRUE(observer.value()->GetAsString(&string_value));
+ EXPECT_TRUE(value->GetAsString(&string_value));
EXPECT_EQ(std::string("something completely different"), string_value);
}
// Regular expressions might be fun.
{
- ExecuteNotificationObserver observer;
- ExecuteJavascriptAndGetValue("/finder.*foo/g;", &observer);
- EXPECT_EQ(Value::TYPE_STRING, observer.value()->GetType());
+ Value* value = rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("/finder.*foo/g;"));
+ EXPECT_EQ(Value::TYPE_STRING, value->GetType());
std::string string_value;
- EXPECT_TRUE(observer.value()->GetAsString(&string_value));
+ EXPECT_TRUE(value->GetAsString(&string_value));
EXPECT_EQ(std::string("/finder.*foo/g"), string_value);
}
// Let's test some date conversions. First up, epoch. Can't use 0 because
// that means uninitialized, so use the next best thing.
{
- ExecuteNotificationObserver observer;
- ExecuteJavascriptAndGetValue("new Date(1);", &observer);
- EXPECT_EQ(Value::TYPE_DOUBLE, observer.value()->GetType());
+ Value* value = rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("new Date(1);"));
+ EXPECT_EQ(Value::TYPE_DOUBLE, value->GetType());
double date_seconds;
- EXPECT_TRUE(observer.value()->GetAsDouble(&date_seconds));
+ EXPECT_TRUE(value->GetAsDouble(&date_seconds));
base::Time time = base::Time::FromDoubleT(date_seconds);
@@ -169,12 +123,11 @@ IN_PROC_BROWSER_TEST_F(RenderViewHostTest,
// Test date with a real date input.
{
- ExecuteNotificationObserver observer;
- ExecuteJavascriptAndGetValue("new Date(Date.UTC(2006, 7, 16, 12, 0, 15));",
- &observer);
- EXPECT_EQ(Value::TYPE_DOUBLE, observer.value()->GetType());
+ Value* value = rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("new Date(Date.UTC(2006, 7, 16, 12, 0, 15));"));
+ EXPECT_EQ(Value::TYPE_DOUBLE, value->GetType());
double date_seconds;
- EXPECT_TRUE(observer.value()->GetAsDouble(&date_seconds));
+ EXPECT_TRUE(value->GetAsDouble(&date_seconds));
base::Time time = base::Time::FromDoubleT(date_seconds);
@@ -191,19 +144,19 @@ IN_PROC_BROWSER_TEST_F(RenderViewHostTest,
// And something more complicated - get an array back as a list.
{
- ExecuteNotificationObserver observer;
- ExecuteJavascriptAndGetValue("new Array(\"one\", 2, false);", &observer);
- EXPECT_EQ(Value::TYPE_LIST, observer.value()->GetType());
+ Value* value = rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("new Array(\"one\", 2, false);"));
+ EXPECT_EQ(Value::TYPE_LIST, value->GetType());
ListValue* list_value;
- EXPECT_TRUE(observer.value()->GetAsList(&list_value));
+ EXPECT_TRUE(value->GetAsList(&list_value));
EXPECT_EQ(3U, list_value->GetSize());
- Value* value;
- EXPECT_TRUE(list_value->Get(0, &value));
- EXPECT_EQ(Value::TYPE_STRING, value->GetType());
- EXPECT_TRUE(list_value->Get(1, &value));
- EXPECT_EQ(Value::TYPE_INTEGER, value->GetType());
- EXPECT_TRUE(list_value->Get(2, &value));
- EXPECT_EQ(Value::TYPE_BOOLEAN, value->GetType());
+ Value* element_value;
+ EXPECT_TRUE(list_value->Get(0, &element_value));
+ EXPECT_EQ(Value::TYPE_STRING, element_value->GetType());
+ EXPECT_TRUE(list_value->Get(1, &element_value));
+ EXPECT_EQ(Value::TYPE_INTEGER, element_value->GetType());
+ EXPECT_TRUE(list_value->Get(2, &element_value));
+ EXPECT_EQ(Value::TYPE_BOOLEAN, element_value->GetType());
}
}
« no previous file with comments | « content/browser/renderer_host/render_view_host.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698