| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "ios/web/web_state/ui/crw_web_controller.h" | 5 #import "ios/web/web_state/ui/crw_web_controller.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
| 10 #include "base/mac/scoped_nsobject.h" | 10 #include "base/mac/scoped_nsobject.h" |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 | 61 |
| 62 // Tests that web controller receives a JS message from the page. | 62 // Tests that web controller receives a JS message from the page. |
| 63 WEB_TEST_F(CRWUIWebViewWebControllerObserverTest, | 63 WEB_TEST_F(CRWUIWebViewWebControllerObserverTest, |
| 64 CRWWKWebViewWebControllerObserverTest, | 64 CRWWKWebViewWebControllerObserverTest, |
| 65 HandleCommand) { | 65 HandleCommand) { |
| 66 this->LoadHtml(@"<p></p>"); | 66 this->LoadHtml(@"<p></p>"); |
| 67 ASSERT_EQ(0U, [this->fake_web_controller_observer_ commandsReceived].size()); | 67 ASSERT_EQ(0U, [this->fake_web_controller_observer_ commandsReceived].size()); |
| 68 base::DictionaryValue command; | 68 base::DictionaryValue command; |
| 69 command.SetString("command", "test.testMessage"); | 69 command.SetString("command", "test.testMessage"); |
| 70 std::string message; | 70 std::string message; |
| 71 base::JSONWriter::Write(&command, &message); | 71 base::JSONWriter::Write(command, &message); |
| 72 this->RunJavaScript([NSString | 72 this->RunJavaScript([NSString |
| 73 stringWithFormat:@"__gCrWeb.message.invokeOnHost(%s)", message.c_str()]); | 73 stringWithFormat:@"__gCrWeb.message.invokeOnHost(%s)", message.c_str()]); |
| 74 this->WaitForBackgroundTasks(); | 74 this->WaitForBackgroundTasks(); |
| 75 ASSERT_EQ(1U, [this->fake_web_controller_observer_ commandsReceived].size()); | 75 ASSERT_EQ(1U, [this->fake_web_controller_observer_ commandsReceived].size()); |
| 76 EXPECT_TRUE([this->fake_web_controller_observer_ commandsReceived][0]->Equals( | 76 EXPECT_TRUE([this->fake_web_controller_observer_ commandsReceived][0]->Equals( |
| 77 &command)); | 77 &command)); |
| 78 } | 78 } |
| 79 | 79 |
| 80 // Tests that web controller receives an immediate JS message from the page. | 80 // Tests that web controller receives an immediate JS message from the page. |
| 81 WEB_TEST_F(CRWUIWebViewWebControllerObserverTest, | 81 WEB_TEST_F(CRWUIWebViewWebControllerObserverTest, |
| 82 CRWWKWebViewWebControllerObserverTest, | 82 CRWWKWebViewWebControllerObserverTest, |
| 83 HandleImmediateCommand) { | 83 HandleImmediateCommand) { |
| 84 this->LoadHtml(@"<p></p>"); | 84 this->LoadHtml(@"<p></p>"); |
| 85 ASSERT_NSNE(@"http://testimmediate#target", | 85 ASSERT_NSNE(@"http://testimmediate#target", |
| 86 [this->webController_ externalRequestWindowName]); | 86 [this->webController_ externalRequestWindowName]); |
| 87 // The only valid immediate commands are window.unload and externalRequest. | 87 // The only valid immediate commands are window.unload and externalRequest. |
| 88 base::DictionaryValue command; | 88 base::DictionaryValue command; |
| 89 command.SetString("command", "externalRequest"); | 89 command.SetString("command", "externalRequest"); |
| 90 command.SetString("href", "http://testimmediate"); | 90 command.SetString("href", "http://testimmediate"); |
| 91 command.SetString("target", "target"); | 91 command.SetString("target", "target"); |
| 92 command.SetString("referrerPolicy", "referrerPolicy"); | 92 command.SetString("referrerPolicy", "referrerPolicy"); |
| 93 std::string message; | 93 std::string message; |
| 94 base::JSONWriter::Write(&command, &message); | 94 base::JSONWriter::Write(command, &message); |
| 95 this->RunJavaScript( | 95 this->RunJavaScript( |
| 96 [NSString stringWithFormat:@"__gCrWeb.message.invokeOnHostImmediate(%s)", | 96 [NSString stringWithFormat:@"__gCrWeb.message.invokeOnHostImmediate(%s)", |
| 97 message.c_str()]); | 97 message.c_str()]); |
| 98 this->WaitForBackgroundTasks(); | 98 this->WaitForBackgroundTasks(); |
| 99 ASSERT_NSEQ(@"http://testimmediate#target", | 99 ASSERT_NSEQ(@"http://testimmediate#target", |
| 100 [this->webController_ externalRequestWindowName]); | 100 [this->webController_ externalRequestWindowName]); |
| 101 } | 101 } |
| 102 | 102 |
| 103 // Send a large number of commands and check each one is immediately received. | 103 // Send a large number of commands and check each one is immediately received. |
| 104 WEB_TEST_F(CRWUIWebViewWebControllerObserverTest, | 104 WEB_TEST_F(CRWUIWebViewWebControllerObserverTest, |
| 105 CRWWKWebViewWebControllerObserverTest, | 105 CRWWKWebViewWebControllerObserverTest, |
| 106 HandleMultipleCommands) { | 106 HandleMultipleCommands) { |
| 107 this->LoadHtml(@"<p></p>"); | 107 this->LoadHtml(@"<p></p>"); |
| 108 | 108 |
| 109 base::DictionaryValue command; | 109 base::DictionaryValue command; |
| 110 command.SetString("command", "test.testMessage"); | 110 command.SetString("command", "test.testMessage"); |
| 111 int kNumberMessages = 200; | 111 int kNumberMessages = 200; |
| 112 for (int count = 0; count <= kNumberMessages; count++) { | 112 for (int count = 0; count <= kNumberMessages; count++) { |
| 113 std::string message; | 113 std::string message; |
| 114 command.SetInteger("number", count); | 114 command.SetInteger("number", count); |
| 115 base::JSONWriter::Write(&command, &message); | 115 base::JSONWriter::Write(command, &message); |
| 116 ASSERT_EQ(0U, | 116 ASSERT_EQ(0U, |
| 117 [this->fake_web_controller_observer_ commandsReceived].size()); | 117 [this->fake_web_controller_observer_ commandsReceived].size()); |
| 118 this->RunJavaScript( | 118 this->RunJavaScript( |
| 119 [NSString stringWithFormat:@"__gCrWeb.message.invokeOnHost(%s)", | 119 [NSString stringWithFormat:@"__gCrWeb.message.invokeOnHost(%s)", |
| 120 message.c_str()]); | 120 message.c_str()]); |
| 121 this->WaitForBackgroundTasks(); | 121 this->WaitForBackgroundTasks(); |
| 122 ASSERT_EQ(1U, | 122 ASSERT_EQ(1U, |
| 123 [this->fake_web_controller_observer_ commandsReceived].size()); | 123 [this->fake_web_controller_observer_ commandsReceived].size()); |
| 124 EXPECT_TRUE( | 124 EXPECT_TRUE( |
| 125 [this->fake_web_controller_observer_ commandsReceived][0]->Equals( | 125 [this->fake_web_controller_observer_ commandsReceived][0]->Equals( |
| 126 &command)); | 126 &command)); |
| 127 [this->fake_web_controller_observer_ commandsReceived].clear(); | 127 [this->fake_web_controller_observer_ commandsReceived].clear(); |
| 128 ASSERT_EQ(0U, | 128 ASSERT_EQ(0U, |
| 129 [this->fake_web_controller_observer_ commandsReceived].size()); | 129 [this->fake_web_controller_observer_ commandsReceived].size()); |
| 130 } | 130 } |
| 131 } | 131 } |
| 132 | 132 |
| 133 } // namespace | 133 } // namespace |
| OLD | NEW |