OLD | NEW |
| (Empty) |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #import <ChromeWebView/ChromeWebView.h> | |
6 #import <WebKit/WebKit.h> | |
7 | |
8 #import "ios/web_view/test/web_view_test.h" | |
9 #import "ios/web_view/test/web_view_test_util.h" | |
10 #import "net/base/mac/url_conversions.h" | |
11 #include "testing/gtest_mac.h" | |
12 #include "url/gurl.h" | |
13 | |
14 #if !defined(__has_feature) || !__has_feature(objc_arc) | |
15 #error "This file requires ARC support." | |
16 #endif | |
17 | |
18 namespace ios_web_view { | |
19 | |
20 namespace { | |
21 | |
22 // Creates web view with incognito configuration and frame equal to screen | |
23 // bounds. | |
24 CWVWebView* CreateIncognitoWebView() { | |
25 return test::CreateWebView([CWVWebViewConfiguration incognitoConfiguration]); | |
26 } | |
27 | |
28 } // namespace | |
29 | |
30 // Test fixture for incognito browsing mode. | |
31 typedef ios_web_view::WebViewTest WebViewIncognitoTest; | |
32 | |
33 // Tests that browsing data (cookie and localStorage) does not leak from | |
34 // non-incognito to incognito web view. | |
35 TEST_F(WebViewIncognitoTest, BrowsingDataNotLeakingToIncognito) { | |
36 // CWVWebView does not allow JavaScript execution if the page was not loaded. | |
37 GURL url = GetUrlForPageWithHtmlBody(std::string()); | |
38 ASSERT_TRUE(test::LoadUrl(web_view_, net::NSURLWithGURL(url))); | |
39 | |
40 NSError* error = nil; | |
41 test::EvaluateJavaScript(web_view_, @"localStorage.setItem('k', 'v');", | |
42 &error); | |
43 ASSERT_NSEQ(nil, error); | |
44 test::EvaluateJavaScript(web_view_, @"document.cookie='n=v;'", &error); | |
45 ASSERT_NSEQ(nil, error); | |
46 | |
47 // Create web view with the same configuration, otherwise browswing data may | |
48 // not be shared immidiately. Make sure that new web view has browsing data | |
49 // from the previous web view. | |
50 CWVWebView* non_incognito_web_view = | |
51 test::CreateWebView([web_view_ configuration]); | |
52 ASSERT_TRUE(test::LoadUrl(non_incognito_web_view, net::NSURLWithGURL(url))); | |
53 id localStorageValue = test::EvaluateJavaScript( | |
54 non_incognito_web_view, @"localStorage.getItem('k');", &error); | |
55 ASSERT_NSEQ(nil, error); | |
56 ASSERT_NSEQ(@"v", localStorageValue); | |
57 id cookie = test::EvaluateJavaScript(non_incognito_web_view, | |
58 @"document.cookie", &error); | |
59 ASSERT_NSEQ(nil, error); | |
60 ASSERT_TRUE([cookie containsString:@"n=v"]); | |
61 | |
62 // Verify that incognito web view does not have browsing data from | |
63 // non-incognito web view. | |
64 CWVWebView* incognito_web_view = CreateIncognitoWebView(); | |
65 ASSERT_TRUE(incognito_web_view); | |
66 ASSERT_TRUE(test::LoadUrl(incognito_web_view, net::NSURLWithGURL(url))); | |
67 localStorageValue = test::EvaluateJavaScript( | |
68 incognito_web_view, @"localStorage.getItem('k');", &error); | |
69 EXPECT_NSEQ(nil, error); | |
70 ASSERT_NSEQ([NSNull null], localStorageValue); | |
71 cookie = | |
72 test::EvaluateJavaScript(incognito_web_view, @"document.cookie", &error); | |
73 EXPECT_NSEQ(nil, error); | |
74 ASSERT_NSEQ(@"", cookie); | |
75 } | |
76 | |
77 // Tests that browsing data (cookie and localStorage) does not leak from | |
78 // incognito to non-incognito web view. | |
79 TEST_F(WebViewIncognitoTest, BrowsingDataNotLeakingFromIncognito) { | |
80 // CWVWebView does not allow JavaScript execution if the page was not loaded. | |
81 CWVWebView* incognito_web_view = CreateIncognitoWebView(); | |
82 GURL url = GetUrlForPageWithHtmlBody(std::string()); | |
83 ASSERT_TRUE(test::LoadUrl(incognito_web_view, net::NSURLWithGURL(url))); | |
84 | |
85 NSError* error = nil; | |
86 test::EvaluateJavaScript(incognito_web_view, | |
87 @"localStorage.setItem('k2', 'v');", &error); | |
88 // |localStorage.setItem| throws exception in Incognito. | |
89 ASSERT_EQ(WKErrorJavaScriptExceptionOccurred, error.code); | |
90 test::EvaluateJavaScript(incognito_web_view, @"document.cookie='n2=v;'", | |
91 &error); | |
92 ASSERT_NSEQ(nil, error); | |
93 | |
94 // Create incognito web view with the same configuration, otherwise browswing | |
95 // data will not be shared. Make sure that new incognito web view has browsing | |
96 // data from the previous incognito web view. | |
97 CWVWebView* incognito_web_view2 = | |
98 test::CreateWebView([incognito_web_view configuration]); | |
99 ASSERT_TRUE(test::LoadUrl(incognito_web_view2, net::NSURLWithGURL(url))); | |
100 id localStorageValue = test::EvaluateJavaScript( | |
101 incognito_web_view2, @"localStorage.getItem('k2');", &error); | |
102 ASSERT_NSEQ(nil, error); | |
103 ASSERT_NSEQ([NSNull null], localStorageValue); | |
104 id cookie = | |
105 test::EvaluateJavaScript(incognito_web_view2, @"document.cookie", &error); | |
106 ASSERT_NSEQ(nil, error); | |
107 ASSERT_TRUE([cookie containsString:@"n2=v"]); | |
108 | |
109 // Verify that non-incognito web view does not have browsing data from | |
110 // incognito web view. | |
111 ASSERT_TRUE(web_view_); | |
112 ASSERT_TRUE(test::LoadUrl(web_view_, net::NSURLWithGURL(url))); | |
113 localStorageValue = test::EvaluateJavaScript( | |
114 web_view_, @"localStorage.getItem('k2');", &error); | |
115 EXPECT_NSEQ(nil, error); | |
116 ASSERT_NSEQ([NSNull null], localStorageValue); | |
117 cookie = test::EvaluateJavaScript(web_view_, @"document.cookie", &error); | |
118 EXPECT_NSEQ(nil, error); | |
119 ASSERT_FALSE([cookie containsString:@"n2=v"]); | |
120 } | |
121 | |
122 } // namespace ios_web_view | |
OLD | NEW |