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

Side by Side Diff: chrome/renderer/extensions/extension_localization_peer_unittest.cc

Issue 1103813002: Make WebURLLoader capable of retaining received buffers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #include <map> 5 #include <map>
6 #include <string> 6 #include <string>
7 #include <vector>
7 8
8 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
9 #include "chrome/renderer/extensions/extension_localization_peer.h" 10 #include "chrome/renderer/extensions/extension_localization_peer.h"
10 #include "extensions/common/message_bundle.h" 11 #include "extensions/common/message_bundle.h"
11 #include "ipc/ipc_sender.h" 12 #include "ipc/ipc_sender.h"
12 #include "ipc/ipc_sync_message.h" 13 #include "ipc/ipc_sync_message.h"
13 #include "net/base/net_errors.h" 14 #include "net/base/net_errors.h"
14 #include "net/url_request/redirect_info.h" 15 #include "net/url_request/redirect_info.h"
15 #include "net/url_request/url_request_status.h" 16 #include "net/url_request/url_request_status.h"
16 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 19
20 namespace {
21
19 using testing::_; 22 using testing::_;
20 using testing::DoAll; 23 using testing::DoAll;
21 using testing::Invoke; 24 using testing::Invoke;
22 using testing::StrEq; 25 using testing::StrEq;
23 using testing::Return; 26 using testing::Return;
27 using ReceivedData = content::RequestPeer::ReceivedData;
24 28
25 static const char* const kExtensionUrl_1 = 29 static const char* const kExtensionUrl_1 =
26 "chrome-extension://some_id/popup.css"; 30 "chrome-extension://some_id/popup.css";
27 31
28 static const char* const kExtensionUrl_2 = 32 static const char* const kExtensionUrl_2 =
29 "chrome-extension://some_id2/popup.css"; 33 "chrome-extension://some_id2/popup.css";
30 34
31 static const char* const kExtensionUrl_3 = 35 static const char* const kExtensionUrl_3 =
32 "chrome-extension://some_id3/popup.css"; 36 "chrome-extension://some_id3/popup.css";
33 37
34 void MessageDeleter(IPC::Message* message) { 38 void MessageDeleter(IPC::Message* message) {
35 delete message; 39 delete message;
36 } 40 }
37 41
42 class FixedReceivedData final : public ReceivedData {
43 public:
44 FixedReceivedData(const char* payload, int length, int encoded_length)
45 : data_(&payload[0], &payload[length]), encoded_length_(encoded_length) {}
46 ~FixedReceivedData() override {}
47
48 const char* payload() const override {
49 // TODO(yhirano): Use |data_.data()| when we can use c++11.
50 return data_.empty() ? nullptr : &data_[0];
51 }
52 int length() const override { return data_.size(); }
53 int encoded_length() const override { return encoded_length_; }
54
55 private:
56 const std::vector<char> data_;
57 const int encoded_length_;
58
59 DISALLOW_COPY_AND_ASSIGN(FixedReceivedData);
60 };
61
38 class MockIpcMessageSender : public IPC::Sender { 62 class MockIpcMessageSender : public IPC::Sender {
39 public: 63 public:
40 MockIpcMessageSender() { 64 MockIpcMessageSender() {
41 ON_CALL(*this, Send(_)) 65 ON_CALL(*this, Send(_))
42 .WillByDefault(DoAll(Invoke(MessageDeleter), Return(true))); 66 .WillByDefault(DoAll(Invoke(MessageDeleter), Return(true)));
43 } 67 }
44 68
45 virtual ~MockIpcMessageSender() {} 69 virtual ~MockIpcMessageSender() {}
46 70
47 MOCK_METHOD1(Send, bool(IPC::Message* message)); 71 MOCK_METHOD1(Send, bool(IPC::Message* message));
48 72
49 private: 73 private:
50 DISALLOW_COPY_AND_ASSIGN(MockIpcMessageSender); 74 DISALLOW_COPY_AND_ASSIGN(MockIpcMessageSender);
51 }; 75 };
52 76
53 class MockRequestPeer : public content::RequestPeer { 77 class MockRequestPeer : public content::RequestPeer {
54 public: 78 public:
55 MockRequestPeer() {} 79 MockRequestPeer() {}
56 virtual ~MockRequestPeer() {} 80 virtual ~MockRequestPeer() {}
57 81
58 MOCK_METHOD2(OnUploadProgress, void(uint64 position, uint64 size)); 82 MOCK_METHOD2(OnUploadProgress, void(uint64 position, uint64 size));
59 MOCK_METHOD2(OnReceivedRedirect, 83 MOCK_METHOD2(OnReceivedRedirect,
60 bool(const net::RedirectInfo& redirect_info, 84 bool(const net::RedirectInfo& redirect_info,
61 const content::ResourceResponseInfo& info)); 85 const content::ResourceResponseInfo& info));
62 MOCK_METHOD1(OnReceivedResponse, 86 MOCK_METHOD1(OnReceivedResponse,
63 void(const content::ResourceResponseInfo& info)); 87 void(const content::ResourceResponseInfo& info));
64 MOCK_METHOD2(OnDownloadedData, void(int len, int encoded_data_length)); 88 MOCK_METHOD2(OnDownloadedData, void(int len, int encoded_data_length));
65 MOCK_METHOD3(OnReceivedData, void(const char* data, 89 void OnReceivedData(scoped_ptr<ReceivedData> data) override {
66 int data_length, 90 OnReceivedDataInternal(data->payload(), data->length(),
67 int encoded_data_length)); 91 data->encoded_length());
92 }
93 MOCK_METHOD3(OnReceivedDataInternal,
94 void(const char* data,
95 int data_length,
96 int encoded_data_length));
68 MOCK_METHOD6(OnCompletedRequest, void( 97 MOCK_METHOD6(OnCompletedRequest, void(
69 int error_code, 98 int error_code,
70 bool was_ignored_by_handler, 99 bool was_ignored_by_handler,
71 bool stale_copy_in_cache, 100 bool stale_copy_in_cache,
72 const std::string& security_info, 101 const std::string& security_info,
73 const base::TimeTicks& completion_time, 102 const base::TimeTicks& completion_time,
74 int64_t total_transfer_size)); 103 int64_t total_transfer_size));
75 104
76 private: 105 private:
77 DISALLOW_COPY_AND_ASSIGN(MockRequestPeer); 106 DISALLOW_COPY_AND_ASSIGN(MockRequestPeer);
78 }; 107 };
79 108
109 } // namespace
110
80 class ExtensionLocalizationPeerTest : public testing::Test { 111 class ExtensionLocalizationPeerTest : public testing::Test {
81 protected: 112 protected:
82 void SetUp() override { 113 void SetUp() override {
83 sender_.reset(new MockIpcMessageSender()); 114 sender_.reset(new MockIpcMessageSender());
84 original_peer_.reset(new MockRequestPeer()); 115 original_peer_.reset(new MockRequestPeer());
85 filter_peer_.reset( 116 filter_peer_.reset(
86 ExtensionLocalizationPeer::CreateExtensionLocalizationPeer( 117 ExtensionLocalizationPeer::CreateExtensionLocalizationPeer(
87 original_peer_.get(), sender_.get(), "text/css", 118 original_peer_.get(), sender_.get(), "text/css",
88 GURL(kExtensionUrl_1))); 119 GURL(kExtensionUrl_1)));
89 } 120 }
(...skipping 28 matching lines...) Expand all
118 } 149 }
119 150
120 TEST_F(ExtensionLocalizationPeerTest, CreateWithValidInput) { 151 TEST_F(ExtensionLocalizationPeerTest, CreateWithValidInput) {
121 EXPECT_TRUE(NULL != filter_peer_.get()); 152 EXPECT_TRUE(NULL != filter_peer_.get());
122 } 153 }
123 154
124 TEST_F(ExtensionLocalizationPeerTest, OnReceivedData) { 155 TEST_F(ExtensionLocalizationPeerTest, OnReceivedData) {
125 EXPECT_TRUE(GetData(filter_peer_.get()).empty()); 156 EXPECT_TRUE(GetData(filter_peer_.get()).empty());
126 157
127 const std::string data_chunk("12345"); 158 const std::string data_chunk("12345");
128 filter_peer_->OnReceivedData(data_chunk.c_str(), data_chunk.length(), -1); 159 filter_peer_->OnReceivedData(make_scoped_ptr(
160 new FixedReceivedData(data_chunk.c_str(), data_chunk.length(), -1)));
129 161
130 EXPECT_EQ(data_chunk, GetData(filter_peer_.get())); 162 EXPECT_EQ(data_chunk, GetData(filter_peer_.get()));
131 163
132 filter_peer_->OnReceivedData(data_chunk.c_str(), data_chunk.length(), -1); 164 filter_peer_->OnReceivedData(make_scoped_ptr(
165 new FixedReceivedData(data_chunk.c_str(), data_chunk.length(), -1)));
133 EXPECT_EQ(data_chunk + data_chunk, GetData(filter_peer_.get())); 166 EXPECT_EQ(data_chunk + data_chunk, GetData(filter_peer_.get()));
134 } 167 }
135 168
136 MATCHER_P(IsURLRequestEqual, status, "") { return arg.status() == status; } 169 MATCHER_P(IsURLRequestEqual, status, "") { return arg.status() == status; }
137 170
138 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestBadURLRequestStatus) { 171 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestBadURLRequestStatus) {
139 // It will self-delete once it exits OnCompletedRequest. 172 // It will self-delete once it exits OnCompletedRequest.
140 ExtensionLocalizationPeer* filter_peer = filter_peer_.release(); 173 ExtensionLocalizationPeer* filter_peer = filter_peer_.release();
141 174
142 EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); 175 EXPECT_CALL(*original_peer_, OnReceivedResponse(_));
143 EXPECT_CALL(*original_peer_, OnCompletedRequest( 176 EXPECT_CALL(*original_peer_, OnCompletedRequest(
144 net::ERR_ABORTED, false, false, "", base::TimeTicks(), -1)); 177 net::ERR_ABORTED, false, false, "", base::TimeTicks(), -1));
145 178
146 filter_peer->OnCompletedRequest( 179 filter_peer->OnCompletedRequest(
147 net::ERR_FAILED, false, false, std::string(), base::TimeTicks(), -1); 180 net::ERR_FAILED, false, false, std::string(), base::TimeTicks(), -1);
148 } 181 }
149 182
150 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestEmptyData) { 183 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestEmptyData) {
151 // It will self-delete once it exits OnCompletedRequest. 184 // It will self-delete once it exits OnCompletedRequest.
152 ExtensionLocalizationPeer* filter_peer = filter_peer_.release(); 185 ExtensionLocalizationPeer* filter_peer = filter_peer_.release();
153 186
154 EXPECT_CALL(*original_peer_, OnReceivedData(_, _, _)).Times(0); 187 EXPECT_CALL(*original_peer_, OnReceivedDataInternal(_, _, _)).Times(0);
155 EXPECT_CALL(*sender_, Send(_)).Times(0); 188 EXPECT_CALL(*sender_, Send(_)).Times(0);
156 189
157 EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); 190 EXPECT_CALL(*original_peer_, OnReceivedResponse(_));
158 EXPECT_CALL(*original_peer_, OnCompletedRequest( 191 EXPECT_CALL(*original_peer_, OnCompletedRequest(
159 net::OK, false, false, "", base::TimeTicks(), -1)); 192 net::OK, false, false, "", base::TimeTicks(), -1));
160 193
161 filter_peer->OnCompletedRequest( 194 filter_peer->OnCompletedRequest(
162 net::OK, false, false, std::string(), base::TimeTicks(), -1); 195 net::OK, false, false, std::string(), base::TimeTicks(), -1);
163 } 196 }
164 197
165 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestNoCatalogs) { 198 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestNoCatalogs) {
166 // It will self-delete once it exits OnCompletedRequest. 199 // It will self-delete once it exits OnCompletedRequest.
167 ExtensionLocalizationPeer* filter_peer = filter_peer_.release(); 200 ExtensionLocalizationPeer* filter_peer = filter_peer_.release();
168 201
169 SetData(filter_peer, "some text"); 202 SetData(filter_peer, "some text");
170 203
171 EXPECT_CALL(*sender_, Send(_)); 204 EXPECT_CALL(*sender_, Send(_));
172 205
173 std::string data = GetData(filter_peer); 206 std::string data = GetData(filter_peer);
174 EXPECT_CALL(*original_peer_, 207 EXPECT_CALL(*original_peer_,
175 OnReceivedData(StrEq(data.data()), data.length(), -1)).Times(2); 208 OnReceivedDataInternal(StrEq(data.c_str()), data.length(), -1))
176 209 .Times(2);
177 EXPECT_CALL(*original_peer_, OnReceivedResponse(_)).Times(2); 210 EXPECT_CALL(*original_peer_, OnReceivedResponse(_)).Times(2);
178 EXPECT_CALL(*original_peer_, OnCompletedRequest( 211 EXPECT_CALL(*original_peer_, OnCompletedRequest(
179 net::OK, false, false, "", base::TimeTicks(), -1)).Times(2); 212 net::OK, false, false, "", base::TimeTicks(), -1)).Times(2);
180 213
181 filter_peer->OnCompletedRequest( 214 filter_peer->OnCompletedRequest(
182 net::OK, false, false, std::string(), base::TimeTicks(), -1); 215 net::OK, false, false, std::string(), base::TimeTicks(), -1);
183 216
184 // Test if Send gets called again (it shouldn't be) when first call returned 217 // Test if Send gets called again (it shouldn't be) when first call returned
185 // an empty dictionary. 218 // an empty dictionary.
186 filter_peer = 219 filter_peer =
(...skipping 15 matching lines...) Expand all
202 l10n_messages_map["some_id2"] = messages; 235 l10n_messages_map["some_id2"] = messages;
203 236
204 SetData(filter_peer, "some __MSG_text__"); 237 SetData(filter_peer, "some __MSG_text__");
205 238
206 // We already have messages in memory, Send will be skipped. 239 // We already have messages in memory, Send will be skipped.
207 EXPECT_CALL(*sender_, Send(_)).Times(0); 240 EXPECT_CALL(*sender_, Send(_)).Times(0);
208 241
209 // __MSG_text__ gets replaced with "new text". 242 // __MSG_text__ gets replaced with "new text".
210 std::string data("some new text"); 243 std::string data("some new text");
211 EXPECT_CALL(*original_peer_, 244 EXPECT_CALL(*original_peer_,
212 OnReceivedData(StrEq(data.data()), data.length(), -1)); 245 OnReceivedDataInternal(StrEq(data.c_str()), data.length(), -1));
213 246
214 EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); 247 EXPECT_CALL(*original_peer_, OnReceivedResponse(_));
215 EXPECT_CALL(*original_peer_, OnCompletedRequest( 248 EXPECT_CALL(*original_peer_, OnCompletedRequest(
216 net::OK, false, false, "", base::TimeTicks(), -1)); 249 net::OK, false, false, "", base::TimeTicks(), -1));
217 250
218 filter_peer->OnCompletedRequest( 251 filter_peer->OnCompletedRequest(
219 net::OK, false, false, std::string(), base::TimeTicks(), -1); 252 net::OK, false, false, std::string(), base::TimeTicks(), -1);
220 } 253 }
221 254
222 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestReplaceMessagesFails) { 255 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestReplaceMessagesFails) {
223 // It will self-delete once it exits OnCompletedRequest. 256 // It will self-delete once it exits OnCompletedRequest.
224 ExtensionLocalizationPeer* filter_peer = 257 ExtensionLocalizationPeer* filter_peer =
225 CreateExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_3)); 258 CreateExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_3));
226 259
227 extensions::L10nMessagesMap messages; 260 extensions::L10nMessagesMap messages;
228 messages.insert(std::make_pair("text", "new text")); 261 messages.insert(std::make_pair("text", "new text"));
229 extensions::ExtensionToL10nMessagesMap& l10n_messages_map = 262 extensions::ExtensionToL10nMessagesMap& l10n_messages_map =
230 *extensions::GetExtensionToL10nMessagesMap(); 263 *extensions::GetExtensionToL10nMessagesMap();
231 l10n_messages_map["some_id3"] = messages; 264 l10n_messages_map["some_id3"] = messages;
232 265
233 std::string message("some __MSG_missing_message__"); 266 std::string message("some __MSG_missing_message__");
234 SetData(filter_peer, message); 267 SetData(filter_peer, message);
235 268
236 // We already have messages in memory, Send will be skipped. 269 // We already have messages in memory, Send will be skipped.
237 EXPECT_CALL(*sender_, Send(_)).Times(0); 270 EXPECT_CALL(*sender_, Send(_)).Times(0);
238 271
239 // __MSG_missing_message__ is missing, so message stays the same. 272 // __MSG_missing_message__ is missing, so message stays the same.
240 EXPECT_CALL(*original_peer_, 273 EXPECT_CALL(*original_peer_, OnReceivedDataInternal(StrEq(message.c_str()),
241 OnReceivedData(StrEq(message.data()), message.length(), -1)); 274 message.length(), -1));
242 275
243 EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); 276 EXPECT_CALL(*original_peer_, OnReceivedResponse(_));
244 EXPECT_CALL(*original_peer_, OnCompletedRequest( 277 EXPECT_CALL(*original_peer_, OnCompletedRequest(
245 net::OK, false, false, "", base::TimeTicks(), -1)); 278 net::OK, false, false, "", base::TimeTicks(), -1));
246 279
247 filter_peer->OnCompletedRequest( 280 filter_peer->OnCompletedRequest(
248 net::OK, false, false, std::string(), base::TimeTicks(), -1); 281 net::OK, false, false, std::string(), base::TimeTicks(), -1);
249 } 282 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698