summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host/test/render_view_host_browsertest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/renderer_host/test/render_view_host_browsertest.cc')
-rw-r--r--chrome/browser/renderer_host/test/render_view_host_browsertest.cc184
1 files changed, 158 insertions, 26 deletions
diff --git a/chrome/browser/renderer_host/test/render_view_host_browsertest.cc b/chrome/browser/renderer_host/test/render_view_host_browsertest.cc
index c93a3a5..67c0dfb 100644
--- a/chrome/browser/renderer_host/test/render_view_host_browsertest.cc
+++ b/chrome/browser/renderer_host/test/render_view_host_browsertest.cc
@@ -3,16 +3,18 @@
// found in the LICENSE file.
#include "base/utf_string_conversions.h"
+#include "base/time.h"
#include "base/values.h"
+#include "chrome/browser/content_settings/host_content_settings_map.h"
+#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/browser/tab_contents/tab_contents.h"
+#include "chrome/browser/tab_contents/tab_specific_content_settings.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/test/in_process_browser_test.h"
#include "chrome/test/ui_test_utils.h"
#include "net/test/test_server.h"
-typedef InProcessBrowserTest RenderViewHostTest;
-
typedef std::pair<int, Value*> ExecuteDetailType;
namespace {
@@ -46,48 +48,178 @@ class ExecuteNotificationObserver : public NotificationObserver {
} // 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,
+ NotificationType::EXECUTE_JAVASCRIPT_RESULT,
+ 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_;
+};
+
+
// Makes sure ExecuteJavascriptInWebFrameNotifyResult works.
IN_PROC_BROWSER_TEST_F(RenderViewHostTest,
ExecuteJavascriptInWebFrameNotifyResult) {
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();
- ASSERT_TRUE(rvh);
// Execute the script 'true' and make sure we get back true.
- int execute_id = rvh->ExecuteJavascriptInWebFrameNotifyResult(
- string16(),
- ASCIIToUTF16("true;"));
{
ExecuteNotificationObserver observer;
- ui_test_utils::RegisterAndWait(
- &observer,
- NotificationType::EXECUTE_JAVASCRIPT_RESULT,
- Source<RenderViewHost>(rvh));
- EXPECT_EQ(execute_id, observer.id());
- ASSERT_TRUE(observer.value());
+ ExecuteJavascriptAndGetValue("true;", &observer);
+ EXPECT_EQ(Value::TYPE_BOOLEAN, observer.value()->GetType());
bool bool_value;
- ASSERT_TRUE(observer.value()->GetAsBoolean(&bool_value));
+ EXPECT_TRUE(observer.value()->GetAsBoolean(&bool_value));
EXPECT_TRUE(bool_value);
}
// Execute the script 'false' and make sure we get back false.
- int execute_id2 = rvh->ExecuteJavascriptInWebFrameNotifyResult(
- string16(),
- ASCIIToUTF16("false;"));
- // The ids should change.
- EXPECT_NE(execute_id, execute_id2);
{
ExecuteNotificationObserver observer;
- ui_test_utils::RegisterAndWait(
- &observer,
- NotificationType::EXECUTE_JAVASCRIPT_RESULT,
- Source<RenderViewHost>(rvh));
- EXPECT_EQ(execute_id2, observer.id());
- ASSERT_TRUE(observer.value());
+ ExecuteJavascriptAndGetValue("false;", &observer);
+ EXPECT_EQ(Value::TYPE_BOOLEAN, observer.value()->GetType());
bool bool_value;
- ASSERT_TRUE(observer.value()->GetAsBoolean(&bool_value));
+ EXPECT_TRUE(observer.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());
+ int int_value;
+ EXPECT_TRUE(observer.value()->GetAsInteger(&int_value));
+ EXPECT_EQ(42, int_value);
+ }
+
+ // Try a floating point number.
+ {
+ ExecuteNotificationObserver observer;
+ ExecuteJavascriptAndGetValue("42.2;", &observer);
+ EXPECT_EQ(Value::TYPE_REAL, observer.value()->GetType());
+ double double_value;
+ EXPECT_TRUE(observer.value()->GetAsReal(&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());
+ std::string string_value;
+ EXPECT_TRUE(observer.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());
+ std::string string_value;
+ EXPECT_TRUE(observer.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_REAL, observer.value()->GetType());
+ double date_seconds;
+ EXPECT_TRUE(observer.value()->GetAsReal(&date_seconds));
+
+ base::Time time = base::Time::FromDoubleT(date_seconds);
+
+ base::Time::Exploded time_exploded;
+ time.UTCExplode(&time_exploded);
+ EXPECT_EQ(1970, time_exploded.year);
+ EXPECT_EQ(1, time_exploded.month);
+ EXPECT_EQ(1, time_exploded.day_of_month);
+ EXPECT_EQ(0, time_exploded.hour);
+ EXPECT_EQ(0, time_exploded.minute);
+ EXPECT_EQ(0, time_exploded.second);
+ }
+
+ // 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_REAL, observer.value()->GetType());
+ double date_seconds;
+ EXPECT_TRUE(observer.value()->GetAsReal(&date_seconds));
+
+ base::Time time = base::Time::FromDoubleT(date_seconds);
+
+ base::Time::Exploded time_exploded;
+ time.UTCExplode(&time_exploded);
+ EXPECT_EQ(2006, time_exploded.year);
+ // Subtle; 0 based in JS, 1 based in base::Time:
+ EXPECT_EQ(8, time_exploded.month);
+ EXPECT_EQ(16, time_exploded.day_of_month);
+ EXPECT_EQ(12, time_exploded.hour);
+ EXPECT_EQ(0, time_exploded.minute);
+ EXPECT_EQ(15, time_exploded.second);
+ }
+
+ // 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());
+ ListValue* list_value;
+ EXPECT_TRUE(observer.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());
+ }
+}
+
+// Regression test for http://crbug.com/63649.
+IN_PROC_BROWSER_TEST_F(RenderViewHostTest, RedirectLoopCookies) {
+ ASSERT_TRUE(test_server()->Start());
+
+ GURL test_url = test_server()->GetURL("files/redirect-loop.html");
+
+ browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting(
+ CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_BLOCK);
+
+ ui_test_utils::NavigateToURL(browser(), test_url);
+
+ TabContents* tab_contents = browser()->GetSelectedTabContents();
+ ASSERT_EQ(UTF8ToUTF16(test_url.spec() + " failed to load"),
+ tab_contents->GetTitle());
+
+ EXPECT_TRUE(tab_contents->GetTabSpecificContentSettings()->IsContentBlocked(
+ CONTENT_SETTINGS_TYPE_COOKIES));
}