| 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 <atlbase.h> | 5 #include <atlbase.h> |
| 6 #include <atlcom.h> | 6 #include <atlcom.h> |
| 7 | 7 |
| 8 #include "base/scoped_comptr_win.h" | 8 #include "base/threading/thread.h" |
| 9 #include "base/win/scoped_comptr.h" |
| 9 #include "base/win/scoped_handle.h" | 10 #include "base/win/scoped_handle.h" |
| 10 #include "base/threading/thread.h" | |
| 11 #include "chrome_frame/bho.h" | 11 #include "chrome_frame/bho.h" |
| 12 //#include "chrome_frame/urlmon_moniker.h" | 12 //#include "chrome_frame/urlmon_moniker.h" |
| 13 #include "chrome_frame/test/chrome_frame_test_utils.h" |
| 13 #include "chrome_frame/test/test_server.h" | 14 #include "chrome_frame/test/test_server.h" |
| 14 #include "chrome_frame/test/chrome_frame_test_utils.h" | |
| 15 #include "chrome_frame/test/urlmon_moniker_tests.h" | 15 #include "chrome_frame/test/urlmon_moniker_tests.h" |
| 16 #include "gmock/gmock.h" | 16 #include "gmock/gmock.h" |
| 17 #include "gtest/gtest.h" | 17 #include "gtest/gtest.h" |
| 18 | 18 |
| 19 #define GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING | 19 #define GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING |
| 20 #include "testing/gmock_mutant.h" | 20 #include "testing/gmock_mutant.h" |
| 21 | 21 |
| 22 using testing::_; | 22 using testing::_; |
| 23 using testing::CreateFunctor; | 23 using testing::CreateFunctor; |
| 24 using testing::Eq; | 24 using testing::Eq; |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 EXPECT_CALL(callback_, OnStopBinding(data_available_response, _)) | 168 EXPECT_CALL(callback_, OnStopBinding(data_available_response, _)) |
| 169 .WillOnce(DoAll(QUIT_LOOP(mgr_->loop()), Return(S_OK))); | 169 .WillOnce(DoAll(QUIT_LOOP(mgr_->loop()), Return(S_OK))); |
| 170 } else { | 170 } else { |
| 171 EXPECT_CALL(callback_, OnStopBinding(data_available_response, _)) | 171 EXPECT_CALL(callback_, OnStopBinding(data_available_response, _)) |
| 172 .WillOnce(Return(S_OK)); | 172 .WillOnce(Return(S_OK)); |
| 173 } | 173 } |
| 174 } | 174 } |
| 175 | 175 |
| 176 HRESULT CreateUrlMonikerAndBindToStorage(const wchar_t* url, | 176 HRESULT CreateUrlMonikerAndBindToStorage(const wchar_t* url, |
| 177 IBindCtx** bind_ctx) { | 177 IBindCtx** bind_ctx) { |
| 178 ScopedComPtr<IMoniker> moniker; | 178 base::win::ScopedComPtr<IMoniker> moniker; |
| 179 HRESULT hr = CreateURLMoniker(NULL, url, moniker.Receive()); | 179 HRESULT hr = CreateURLMoniker(NULL, url, moniker.Receive()); |
| 180 EXPECT_TRUE(moniker != NULL); | 180 EXPECT_TRUE(moniker != NULL); |
| 181 if (moniker) { | 181 if (moniker) { |
| 182 ScopedComPtr<IBindCtx> context; | 182 base::win::ScopedComPtr<IBindCtx> context; |
| 183 ::CreateAsyncBindCtx(0, callback(), NULL, context.Receive()); | 183 ::CreateAsyncBindCtx(0, callback(), NULL, context.Receive()); |
| 184 DCHECK(context); | 184 DCHECK(context); |
| 185 ScopedComPtr<IStream> stream; | 185 base::win::ScopedComPtr<IStream> stream; |
| 186 hr = moniker->BindToStorage(context, NULL, IID_IStream, | 186 hr = moniker->BindToStorage(context, NULL, IID_IStream, |
| 187 reinterpret_cast<void**>(stream.Receive())); | 187 reinterpret_cast<void**>(stream.Receive())); |
| 188 if (SUCCEEDED(hr) && bind_ctx) | 188 if (SUCCEEDED(hr) && bind_ctx) |
| 189 *bind_ctx = context.Detach(); | 189 *bind_ctx = context.Detach(); |
| 190 } | 190 } |
| 191 return hr; | 191 return hr; |
| 192 } | 192 } |
| 193 | 193 |
| 194 IBindStatusCallback* callback() { | 194 IBindStatusCallback* callback() { |
| 195 return &callback_; | 195 return &callback_; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 208 const wchar_t test_url[] = L"http://localhost:43210/"; | 208 const wchar_t test_url[] = L"http://localhost:43210/"; |
| 209 UrlmonMonikerTestManager test(test_url); | 209 UrlmonMonikerTestManager test(test_url); |
| 210 UrlmonMonikerTestCallback callback(&test); | 210 UrlmonMonikerTestCallback callback(&test); |
| 211 | 211 |
| 212 RunTestServer server_thread; | 212 RunTestServer server_thread; |
| 213 EXPECT_TRUE(server_thread.Start()); | 213 EXPECT_TRUE(server_thread.Start()); |
| 214 | 214 |
| 215 callback.SetCallbackExpectations( | 215 callback.SetCallbackExpectations( |
| 216 UrlmonMonikerTestCallback::REQUEST_SYNCHRONOUS, S_OK, false); | 216 UrlmonMonikerTestCallback::REQUEST_SYNCHRONOUS, S_OK, false); |
| 217 | 217 |
| 218 ScopedComPtr<IBindCtx> bind_ctx; | 218 base::win::ScopedComPtr<IBindCtx> bind_ctx; |
| 219 HRESULT hr = callback.CreateUrlMonikerAndBindToStorage(test_url, | 219 HRESULT hr = callback.CreateUrlMonikerAndBindToStorage(test_url, |
| 220 bind_ctx.Receive()); | 220 bind_ctx.Receive()); |
| 221 // The download should have happened synchronously, so we don't expect | 221 // The download should have happened synchronously, so we don't expect |
| 222 // MK_S_ASYNCHRONOUS or any errors. | 222 // MK_S_ASYNCHRONOUS or any errors. |
| 223 EXPECT_EQ(S_OK, hr); | 223 EXPECT_EQ(S_OK, hr); |
| 224 | 224 |
| 225 IBindCtx* release = bind_ctx.Detach(); | 225 IBindCtx* release = bind_ctx.Detach(); |
| 226 EXPECT_EQ(0, release->Release()); | 226 EXPECT_EQ(0, release->Release()); |
| 227 | 227 |
| 228 server_thread.Stop(); | 228 server_thread.Stop(); |
| 229 } | 229 } |
| 230 | 230 |
| 231 // Tests asynchronously binding to a moniker and downloading the target. | 231 // Tests asynchronously binding to a moniker and downloading the target. |
| 232 TEST_F(UrlmonMonikerTest, BindToStorageAsynchronous) { | 232 TEST_F(UrlmonMonikerTest, BindToStorageAsynchronous) { |
| 233 const wchar_t test_url[] = L"http://localhost:43210/"; | 233 const wchar_t test_url[] = L"http://localhost:43210/"; |
| 234 UrlmonMonikerTestManager test(test_url); | 234 UrlmonMonikerTestManager test(test_url); |
| 235 UrlmonMonikerTestCallback callback(&test); | 235 UrlmonMonikerTestCallback callback(&test); |
| 236 | 236 |
| 237 test_server::SimpleWebServer server(43210); | 237 test_server::SimpleWebServer server(43210); |
| 238 test_server::SimpleResponse default_response("/", kTestContent); | 238 test_server::SimpleResponse default_response("/", kTestContent); |
| 239 server.AddResponse(&default_response); | 239 server.AddResponse(&default_response); |
| 240 | 240 |
| 241 callback.SetCallbackExpectations( | 241 callback.SetCallbackExpectations( |
| 242 UrlmonMonikerTestCallback::REQUEST_ASYNCHRONOUS, S_OK, true); | 242 UrlmonMonikerTestCallback::REQUEST_ASYNCHRONOUS, S_OK, true); |
| 243 | 243 |
| 244 ScopedComPtr<IBindCtx> bind_ctx; | 244 base::win::ScopedComPtr<IBindCtx> bind_ctx; |
| 245 HRESULT hr = callback.CreateUrlMonikerAndBindToStorage(test_url, | 245 HRESULT hr = callback.CreateUrlMonikerAndBindToStorage(test_url, |
| 246 bind_ctx.Receive()); | 246 bind_ctx.Receive()); |
| 247 EXPECT_EQ(MK_S_ASYNCHRONOUS, hr); | 247 EXPECT_EQ(MK_S_ASYNCHRONOUS, hr); |
| 248 test.loop().RunFor(kUrlmonMonikerTimeoutSec); | 248 test.loop().RunFor(kUrlmonMonikerTimeoutSec); |
| 249 | 249 |
| 250 IBindCtx* release = bind_ctx.Detach(); | 250 IBindCtx* release = bind_ctx.Detach(); |
| 251 EXPECT_EQ(0, release->Release()); | 251 EXPECT_EQ(0, release->Release()); |
| 252 } | 252 } |
| 253 | 253 |
| 254 // Responds with the Chrome mime type. | 254 // Responds with the Chrome mime type. |
| (...skipping 30 matching lines...) Expand all Loading... |
| 285 EXPECT_EQ(MK_S_ASYNCHRONOUS, hr); | 285 EXPECT_EQ(MK_S_ASYNCHRONOUS, hr); |
| 286 test.loop().RunFor(kUrlmonMonikerTimeoutSec); | 286 test.loop().RunFor(kUrlmonMonikerTimeoutSec); |
| 287 | 287 |
| 288 scoped_refptr<RequestData> request_data( | 288 scoped_refptr<RequestData> request_data( |
| 289 test.nav_manager().GetActiveRequestData(test_url)); | 289 test.nav_manager().GetActiveRequestData(test_url)); |
| 290 EXPECT_TRUE(request_data != NULL); | 290 EXPECT_TRUE(request_data != NULL); |
| 291 | 291 |
| 292 if (request_data) { | 292 if (request_data) { |
| 293 EXPECT_EQ(request_data->GetCachedContentSize(), | 293 EXPECT_EQ(request_data->GetCachedContentSize(), |
| 294 arraysize(kTestContent) - 1); | 294 arraysize(kTestContent) - 1); |
| 295 ScopedComPtr<IStream> stream; | 295 base::win::ScopedComPtr<IStream> stream; |
| 296 request_data->GetResetCachedContentStream(stream.Receive()); | 296 request_data->GetResetCachedContentStream(stream.Receive()); |
| 297 EXPECT_TRUE(stream != NULL); | 297 EXPECT_TRUE(stream != NULL); |
| 298 if (stream) { | 298 if (stream) { |
| 299 char buffer[0xffff]; | 299 char buffer[0xffff]; |
| 300 DWORD read = 0; | 300 DWORD read = 0; |
| 301 stream->Read(buffer, sizeof(buffer), &read); | 301 stream->Read(buffer, sizeof(buffer), &read); |
| 302 EXPECT_EQ(read, arraysize(kTestContent) - 1); | 302 EXPECT_EQ(read, arraysize(kTestContent) - 1); |
| 303 EXPECT_EQ(0, memcmp(buffer, kTestContent, read)); | 303 EXPECT_EQ(0, memcmp(buffer, kTestContent, read)); |
| 304 } | 304 } |
| 305 } | 305 } |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 callback2.SetCallbackExpectations( | 339 callback2.SetCallbackExpectations( |
| 340 UrlmonMonikerTestCallback::EXPECT_NO_CALL, S_OK, false); | 340 UrlmonMonikerTestCallback::EXPECT_NO_CALL, S_OK, false); |
| 341 hr = callback2.CreateUrlMonikerAndBindToStorage(test_url, NULL); | 341 hr = callback2.CreateUrlMonikerAndBindToStorage(test_url, NULL); |
| 342 // S_OK means that the operation completed synchronously. | 342 // S_OK means that the operation completed synchronously. |
| 343 // Otherwise we'd get MK_S_ASYNCHRONOUS. | 343 // Otherwise we'd get MK_S_ASYNCHRONOUS. |
| 344 EXPECT_EQ(S_OK, hr); | 344 EXPECT_EQ(S_OK, hr); |
| 345 } | 345 } |
| 346 } | 346 } |
| 347 | 347 |
| 348 */ | 348 */ |
| OLD | NEW |