| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 | 7 |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "chrome/common/extensions/extension_message_bundle.h" | 9 #include "chrome/common/extensions/extension_message_bundle.h" |
| 10 #include "chrome/common/extensions/extension_localization_peer.h" | 10 #include "chrome/common/extensions/extension_localization_peer.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 DISALLOW_COPY_AND_ASSIGN(MockIpcMessageSender); | 51 DISALLOW_COPY_AND_ASSIGN(MockIpcMessageSender); |
| 52 }; | 52 }; |
| 53 | 53 |
| 54 class MockResourceLoaderBridgePeer | 54 class MockResourceLoaderBridgePeer |
| 55 : public webkit_glue::ResourceLoaderBridge::Peer { | 55 : public webkit_glue::ResourceLoaderBridge::Peer { |
| 56 public: | 56 public: |
| 57 MockResourceLoaderBridgePeer() {} | 57 MockResourceLoaderBridgePeer() {} |
| 58 virtual ~MockResourceLoaderBridgePeer() {} | 58 virtual ~MockResourceLoaderBridgePeer() {} |
| 59 | 59 |
| 60 MOCK_METHOD2(OnUploadProgress, void(uint64 position, uint64 size)); | 60 MOCK_METHOD2(OnUploadProgress, void(uint64 position, uint64 size)); |
| 61 MOCK_METHOD4(OnReceivedRedirect, bool( | 61 MOCK_METHOD6(OnReceivedRedirect, bool( |
| 62 const GURL& new_url, | 62 const GURL& new_url, |
| 63 const webkit_glue::ResourceResponseInfo& info, | 63 const webkit_glue::ResourceResponseInfo& info, |
| 64 const base::TimeTicks& request_start_time, |
| 65 const base::TimeTicks& response_start_time, |
| 64 bool* has_new_first_party_for_cookies, | 66 bool* has_new_first_party_for_cookies, |
| 65 GURL* new_first_party_for_cookies)); | 67 GURL* new_first_party_for_cookies)); |
| 66 MOCK_METHOD1(OnReceivedResponse, void( | 68 MOCK_METHOD3(OnReceivedResponse, void( |
| 67 const webkit_glue::ResourceResponseInfo& info)); | 69 const webkit_glue::ResourceResponseInfo& info, |
| 70 const base::TimeTicks& request_start_time, |
| 71 const base::TimeTicks& response_start_time)); |
| 68 MOCK_METHOD1(OnDownloadedData, void(int len)); | 72 MOCK_METHOD1(OnDownloadedData, void(int len)); |
| 69 MOCK_METHOD3(OnReceivedData, void(const char* data, | 73 MOCK_METHOD3(OnReceivedData, void(const char* data, |
| 70 int data_length, | 74 int data_length, |
| 71 int encoded_data_length)); | 75 int encoded_data_length)); |
| 72 MOCK_METHOD3(OnCompletedRequest, void( | 76 MOCK_METHOD3(OnCompletedRequest, void( |
| 73 const net::URLRequestStatus& status, | 77 const net::URLRequestStatus& status, |
| 74 const std::string& security_info, | 78 const std::string& security_info, |
| 75 const base::Time& completion_time)); | 79 const base::TimeTicks& completion_time)); |
| 76 | 80 |
| 77 private: | 81 private: |
| 78 DISALLOW_COPY_AND_ASSIGN(MockResourceLoaderBridgePeer); | 82 DISALLOW_COPY_AND_ASSIGN(MockResourceLoaderBridgePeer); |
| 79 }; | 83 }; |
| 80 | 84 |
| 81 class ExtensionLocalizationPeerTest : public testing::Test { | 85 class ExtensionLocalizationPeerTest : public testing::Test { |
| 82 protected: | 86 protected: |
| 83 virtual void SetUp() { | 87 virtual void SetUp() { |
| 84 sender_.reset(new MockIpcMessageSender()); | 88 sender_.reset(new MockIpcMessageSender()); |
| 85 original_peer_.reset(new MockResourceLoaderBridgePeer()); | 89 original_peer_.reset(new MockResourceLoaderBridgePeer()); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 filter_peer_->OnReceivedData(data_chunk.c_str(), data_chunk.length(), -1); | 137 filter_peer_->OnReceivedData(data_chunk.c_str(), data_chunk.length(), -1); |
| 134 EXPECT_EQ(data_chunk + data_chunk, GetData(filter_peer_.get())); | 138 EXPECT_EQ(data_chunk + data_chunk, GetData(filter_peer_.get())); |
| 135 } | 139 } |
| 136 | 140 |
| 137 MATCHER_P(IsURLRequestEqual, status, "") { return arg.status() == status; } | 141 MATCHER_P(IsURLRequestEqual, status, "") { return arg.status() == status; } |
| 138 | 142 |
| 139 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestBadURLRequestStatus) { | 143 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestBadURLRequestStatus) { |
| 140 // It will self-delete once it exits OnCompletedRequest. | 144 // It will self-delete once it exits OnCompletedRequest. |
| 141 ExtensionLocalizationPeer* filter_peer = filter_peer_.release(); | 145 ExtensionLocalizationPeer* filter_peer = filter_peer_.release(); |
| 142 | 146 |
| 143 EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); | 147 EXPECT_CALL(*original_peer_, OnReceivedResponse(_, _, _)); |
| 144 EXPECT_CALL(*original_peer_, OnCompletedRequest( | 148 EXPECT_CALL(*original_peer_, OnCompletedRequest( |
| 145 IsURLRequestEqual(net::URLRequestStatus::CANCELED), "", base::Time())); | 149 IsURLRequestEqual(net::URLRequestStatus::CANCELED), "", base::TimeTicks())); |
| 146 | 150 |
| 147 net::URLRequestStatus status; | 151 net::URLRequestStatus status; |
| 148 status.set_status(net::URLRequestStatus::FAILED); | 152 status.set_status(net::URLRequestStatus::FAILED); |
| 149 filter_peer->OnCompletedRequest(status, "", base::Time()); | 153 filter_peer->OnCompletedRequest(status, "", base::TimeTicks()); |
| 150 } | 154 } |
| 151 | 155 |
| 152 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestEmptyData) { | 156 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestEmptyData) { |
| 153 // It will self-delete once it exits OnCompletedRequest. | 157 // It will self-delete once it exits OnCompletedRequest. |
| 154 ExtensionLocalizationPeer* filter_peer = filter_peer_.release(); | 158 ExtensionLocalizationPeer* filter_peer = filter_peer_.release(); |
| 155 | 159 |
| 156 EXPECT_CALL(*original_peer_, OnReceivedData(_, _, _)).Times(0); | 160 EXPECT_CALL(*original_peer_, OnReceivedData(_, _, _)).Times(0); |
| 157 EXPECT_CALL(*sender_, Send(_)).Times(0); | 161 EXPECT_CALL(*sender_, Send(_)).Times(0); |
| 158 | 162 |
| 159 EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); | 163 EXPECT_CALL(*original_peer_, OnReceivedResponse(_, _, _)); |
| 160 EXPECT_CALL(*original_peer_, OnCompletedRequest( | 164 EXPECT_CALL(*original_peer_, OnCompletedRequest(IsURLRequestEqual( |
| 161 IsURLRequestEqual(net::URLRequestStatus::SUCCESS), "", base::Time())); | 165 net::URLRequestStatus::SUCCESS), "", base::TimeTicks())); |
| 162 | 166 |
| 163 net::URLRequestStatus status; | 167 net::URLRequestStatus status; |
| 164 status.set_status(net::URLRequestStatus::SUCCESS); | 168 status.set_status(net::URLRequestStatus::SUCCESS); |
| 165 filter_peer->OnCompletedRequest(status, "", base::Time()); | 169 filter_peer->OnCompletedRequest(status, "", base::TimeTicks()); |
| 166 } | 170 } |
| 167 | 171 |
| 168 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestNoCatalogs) { | 172 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestNoCatalogs) { |
| 169 // It will self-delete once it exits OnCompletedRequest. | 173 // It will self-delete once it exits OnCompletedRequest. |
| 170 ExtensionLocalizationPeer* filter_peer = filter_peer_.release(); | 174 ExtensionLocalizationPeer* filter_peer = filter_peer_.release(); |
| 171 | 175 |
| 172 SetData(filter_peer, "some text"); | 176 SetData(filter_peer, "some text"); |
| 173 | 177 |
| 174 EXPECT_CALL(*sender_, Send(_)); | 178 EXPECT_CALL(*sender_, Send(_)); |
| 175 | 179 |
| 176 std::string data = GetData(filter_peer); | 180 std::string data = GetData(filter_peer); |
| 177 EXPECT_CALL(*original_peer_, | 181 EXPECT_CALL(*original_peer_, |
| 178 OnReceivedData(StrEq(data.data()), data.length(), -1)).Times(2); | 182 OnReceivedData(StrEq(data.data()), data.length(), -1)).Times(2); |
| 179 | 183 |
| 180 EXPECT_CALL(*original_peer_, OnReceivedResponse(_)).Times(2); | 184 EXPECT_CALL(*original_peer_, OnReceivedResponse(_, _, _)).Times(2); |
| 181 EXPECT_CALL(*original_peer_, OnCompletedRequest( | 185 EXPECT_CALL(*original_peer_, OnCompletedRequest( |
| 182 IsURLRequestEqual( | 186 IsURLRequestEqual( |
| 183 net::URLRequestStatus::SUCCESS), "", base::Time())).Times(2); | 187 net::URLRequestStatus::SUCCESS), "", base::TimeTicks())).Times(2); |
| 184 | 188 |
| 185 net::URLRequestStatus status; | 189 net::URLRequestStatus status; |
| 186 status.set_status(net::URLRequestStatus::SUCCESS); | 190 status.set_status(net::URLRequestStatus::SUCCESS); |
| 187 filter_peer->OnCompletedRequest(status, "", base::Time()); | 191 filter_peer->OnCompletedRequest(status, "", base::TimeTicks()); |
| 188 | 192 |
| 189 // Test if Send gets called again (it shouldn't be) when first call returned | 193 // Test if Send gets called again (it shouldn't be) when first call returned |
| 190 // an empty dictionary. | 194 // an empty dictionary. |
| 191 filter_peer = | 195 filter_peer = |
| 192 CreateExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_1)); | 196 CreateExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_1)); |
| 193 SetData(filter_peer, "some text"); | 197 SetData(filter_peer, "some text"); |
| 194 filter_peer->OnCompletedRequest(status, "", base::Time()); | 198 filter_peer->OnCompletedRequest(status, "", base::TimeTicks()); |
| 195 } | 199 } |
| 196 | 200 |
| 197 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestWithCatalogs) { | 201 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestWithCatalogs) { |
| 198 // It will self-delete once it exits OnCompletedRequest. | 202 // It will self-delete once it exits OnCompletedRequest. |
| 199 ExtensionLocalizationPeer* filter_peer = | 203 ExtensionLocalizationPeer* filter_peer = |
| 200 CreateExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_2)); | 204 CreateExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_2)); |
| 201 | 205 |
| 202 L10nMessagesMap messages; | 206 L10nMessagesMap messages; |
| 203 messages.insert(std::make_pair("text", "new text")); | 207 messages.insert(std::make_pair("text", "new text")); |
| 204 ExtensionToL10nMessagesMap& l10n_messages_map = | 208 ExtensionToL10nMessagesMap& l10n_messages_map = |
| 205 *GetExtensionToL10nMessagesMap(); | 209 *GetExtensionToL10nMessagesMap(); |
| 206 l10n_messages_map["some_id2"] = messages; | 210 l10n_messages_map["some_id2"] = messages; |
| 207 | 211 |
| 208 SetData(filter_peer, "some __MSG_text__"); | 212 SetData(filter_peer, "some __MSG_text__"); |
| 209 | 213 |
| 210 // We already have messages in memory, Send will be skipped. | 214 // We already have messages in memory, Send will be skipped. |
| 211 EXPECT_CALL(*sender_, Send(_)).Times(0); | 215 EXPECT_CALL(*sender_, Send(_)).Times(0); |
| 212 | 216 |
| 213 // __MSG_text__ gets replaced with "new text". | 217 // __MSG_text__ gets replaced with "new text". |
| 214 std::string data("some new text"); | 218 std::string data("some new text"); |
| 215 EXPECT_CALL(*original_peer_, | 219 EXPECT_CALL(*original_peer_, |
| 216 OnReceivedData(StrEq(data.data()), data.length(), -1)); | 220 OnReceivedData(StrEq(data.data()), data.length(), -1)); |
| 217 | 221 |
| 218 EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); | 222 EXPECT_CALL(*original_peer_, OnReceivedResponse(_, _, _)); |
| 219 EXPECT_CALL(*original_peer_, OnCompletedRequest( | 223 EXPECT_CALL(*original_peer_, OnCompletedRequest(IsURLRequestEqual( |
| 220 IsURLRequestEqual(net::URLRequestStatus::SUCCESS), "", base::Time())); | 224 net::URLRequestStatus::SUCCESS), "", base::TimeTicks())); |
| 221 | 225 |
| 222 net::URLRequestStatus status; | 226 net::URLRequestStatus status; |
| 223 status.set_status(net::URLRequestStatus::SUCCESS); | 227 status.set_status(net::URLRequestStatus::SUCCESS); |
| 224 filter_peer->OnCompletedRequest(status, "", base::Time()); | 228 filter_peer->OnCompletedRequest(status, "", base::TimeTicks()); |
| 225 } | 229 } |
| 226 | 230 |
| 227 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestReplaceMessagesFails) { | 231 TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestReplaceMessagesFails) { |
| 228 // It will self-delete once it exits OnCompletedRequest. | 232 // It will self-delete once it exits OnCompletedRequest. |
| 229 ExtensionLocalizationPeer* filter_peer = | 233 ExtensionLocalizationPeer* filter_peer = |
| 230 CreateExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_3)); | 234 CreateExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_3)); |
| 231 | 235 |
| 232 L10nMessagesMap messages; | 236 L10nMessagesMap messages; |
| 233 messages.insert(std::make_pair("text", "new text")); | 237 messages.insert(std::make_pair("text", "new text")); |
| 234 ExtensionToL10nMessagesMap& l10n_messages_map = | 238 ExtensionToL10nMessagesMap& l10n_messages_map = |
| 235 *GetExtensionToL10nMessagesMap(); | 239 *GetExtensionToL10nMessagesMap(); |
| 236 l10n_messages_map["some_id3"] = messages; | 240 l10n_messages_map["some_id3"] = messages; |
| 237 | 241 |
| 238 std::string message("some __MSG_missing_message__"); | 242 std::string message("some __MSG_missing_message__"); |
| 239 SetData(filter_peer, message); | 243 SetData(filter_peer, message); |
| 240 | 244 |
| 241 // We already have messages in memory, Send will be skipped. | 245 // We already have messages in memory, Send will be skipped. |
| 242 EXPECT_CALL(*sender_, Send(_)).Times(0); | 246 EXPECT_CALL(*sender_, Send(_)).Times(0); |
| 243 | 247 |
| 244 // __MSG_missing_message__ is missing, so message stays the same. | 248 // __MSG_missing_message__ is missing, so message stays the same. |
| 245 EXPECT_CALL(*original_peer_, | 249 EXPECT_CALL(*original_peer_, |
| 246 OnReceivedData(StrEq(message.data()), message.length(), -1)); | 250 OnReceivedData(StrEq(message.data()), message.length(), -1)); |
| 247 | 251 |
| 248 EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); | 252 EXPECT_CALL(*original_peer_, OnReceivedResponse(_, _, _)); |
| 249 EXPECT_CALL(*original_peer_, OnCompletedRequest( | 253 EXPECT_CALL(*original_peer_, OnCompletedRequest(IsURLRequestEqual( |
| 250 IsURLRequestEqual(net::URLRequestStatus::SUCCESS), "", base::Time())); | 254 net::URLRequestStatus::SUCCESS), "", base::TimeTicks())); |
| 251 | 255 |
| 252 net::URLRequestStatus status; | 256 net::URLRequestStatus status; |
| 253 status.set_status(net::URLRequestStatus::SUCCESS); | 257 status.set_status(net::URLRequestStatus::SUCCESS); |
| 254 filter_peer->OnCompletedRequest(status, "", base::Time()); | 258 filter_peer->OnCompletedRequest(status, "", base::TimeTicks()); |
| 255 } | 259 } |
| OLD | NEW |