| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <string> | 5 #include <string> |
| 6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
| 7 #include "base/waitable_event.h" | 7 #include "base/waitable_event.h" |
| 8 #include "chrome/common/automation_messages.h" | 8 #include "chrome/common/automation_messages.h" |
| 9 #include "chrome_frame/cfproxy_private.h" | 9 #include "chrome_frame/cfproxy_private.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 using testing::CreateFunctor; | 21 using testing::CreateFunctor; |
| 22 using testing::StrEq; | 22 using testing::StrEq; |
| 23 using testing::Eq; | 23 using testing::Eq; |
| 24 | 24 |
| 25 // There is not much to test here since CFProxy is pretty dumb. | 25 // There is not much to test here since CFProxy is pretty dumb. |
| 26 struct MockFactory : public ChromeProxyFactory { | 26 struct MockFactory : public ChromeProxyFactory { |
| 27 MOCK_METHOD0(CreateProxy, ChromeProxy*()); | 27 MOCK_METHOD0(CreateProxy, ChromeProxy*()); |
| 28 }; | 28 }; |
| 29 | 29 |
| 30 struct MockChromeProxyDelegate : public ChromeProxyDelegate { | 30 struct MockChromeProxyDelegate : public ChromeProxyDelegate { |
| 31 MOCK_METHOD1(OnMessageReceived, void(const IPC::Message& message)); |
| 31 MOCK_METHOD1(Connected, void(ChromeProxy* proxy)); | 32 MOCK_METHOD1(Connected, void(ChromeProxy* proxy)); |
| 32 MOCK_METHOD2(PeerLost, void(ChromeProxy*, enum DisconnectReason reason)); | 33 MOCK_METHOD2(PeerLost, void(ChromeProxy*, enum DisconnectReason reason)); |
| 33 MOCK_METHOD0(Disconnected, void()); | 34 MOCK_METHOD0(Disconnected, void()); |
| 34 MOCK_METHOD0(tab_handle, int()); | 35 MOCK_METHOD0(tab_handle, int()); |
| 35 | 36 |
| 36 MOCK_METHOD5(Completed_CreateTab, void(bool success, HWND chrome_wnd, | 37 MOCK_METHOD5(Completed_CreateTab, void(bool success, HWND chrome_wnd, |
| 37 HWND tab_window, int tab_handle, int session_id)); | 38 HWND tab_window, int tab_handle, int session_id)); |
| 38 MOCK_METHOD5(Completed_ConnectToTab, void(bool success, HWND chrome_window, | 39 MOCK_METHOD5(Completed_ConnectToTab, void(bool success, HWND chrome_window, |
| 39 HWND tab_window, int tab_handle, int session_id)); | 40 HWND tab_window, int tab_handle, int session_id)); |
| 40 MOCK_METHOD2(Completed_Navigate, void(bool success, | 41 MOCK_METHOD2(Completed_Navigate, void(bool success, |
| 41 enum AutomationMsg_NavigationResponseValues res)); | 42 enum AutomationMsg_NavigationResponseValues res)); |
| 42 MOCK_METHOD3(Completed_InstallExtension, void(bool success, | 43 MOCK_METHOD3(Completed_InstallExtension, void(bool success, |
| 43 enum AutomationMsg_ExtensionResponseValues res, SyncMessageContext* ctx)); | 44 enum AutomationMsg_ExtensionResponseValues res, SyncMessageContext* ctx)); |
| 44 MOCK_METHOD3(Completed_LoadExpandedExtension, void(bool success, | 45 MOCK_METHOD3(Completed_LoadExpandedExtension, void(bool success, |
| 45 enum AutomationMsg_ExtensionResponseValues res, SyncMessageContext* ctx)); | 46 enum AutomationMsg_ExtensionResponseValues res, SyncMessageContext* ctx)); |
| 46 MOCK_METHOD2(Completed_GetEnabledExtensions, void(bool success, | 47 MOCK_METHOD2(Completed_GetEnabledExtensions, void(bool success, |
| 47 const std::vector<FilePath>* v)); | 48 const std::vector<FilePath>* v)); |
| 48 | 49 |
| 49 // Network requests from Chrome. | 50 // Network requests from Chrome. |
| 50 MOCK_METHOD2(Network_Start, void(int request_id, | 51 MOCK_METHOD2(Network_Start, void(int request_id, |
| 51 const IPC::AutomationURLRequest& request_info)); | 52 const AutomationURLRequest& request_info)); |
| 52 MOCK_METHOD2(Network_Read, void(int request_id, int bytes_to_read)); | 53 MOCK_METHOD2(Network_Read, void(int request_id, int bytes_to_read)); |
| 53 MOCK_METHOD2(Network_End, void(int request_id, const URLRequestStatus& s)); | 54 MOCK_METHOD2(Network_End, void(int request_id, const URLRequestStatus& s)); |
| 54 MOCK_METHOD1(Network_DownloadInHost, void(int request_id)); | 55 MOCK_METHOD1(Network_DownloadInHost, void(int request_id)); |
| 55 MOCK_METHOD2(GetCookies, void(const GURL& url, int cookie_id)); | 56 MOCK_METHOD2(GetCookies, void(const GURL& url, int cookie_id)); |
| 56 MOCK_METHOD2(SetCookie, void(const GURL& url, const std::string& cookie)); | 57 MOCK_METHOD2(SetCookie, void(const GURL& url, const std::string& cookie)); |
| 57 | 58 |
| 58 // Navigation progress notifications. | 59 // Navigation progress notifications. |
| 59 MOCK_METHOD2(NavigationStateChanged, void(int flags, | 60 MOCK_METHOD2(NavigationStateChanged, void(int flags, |
| 60 const IPC::NavigationInfo& nav_info)); | 61 const NavigationInfo& nav_info)); |
| 61 MOCK_METHOD1(UpdateTargetUrl, void(const std::wstring& url)); | 62 MOCK_METHOD1(UpdateTargetUrl, void(const std::wstring& url)); |
| 62 MOCK_METHOD2(NavigationFailed, void(int error_code, const GURL& gurl)); | 63 MOCK_METHOD2(NavigationFailed, void(int error_code, const GURL& gurl)); |
| 63 MOCK_METHOD1(DidNavigate, void(const IPC::NavigationInfo& navigation_info)); | 64 MOCK_METHOD1(DidNavigate, void(const NavigationInfo& navigation_info)); |
| 64 MOCK_METHOD1(TabLoaded, void(const GURL& url)); | 65 MOCK_METHOD1(TabLoaded, void(const GURL& url)); |
| 65 | 66 |
| 66 // | 67 // |
| 67 MOCK_METHOD3(OpenURL, void(const GURL& url_to_open, const GURL& referrer, | 68 MOCK_METHOD3(OpenURL, void(const GURL& url_to_open, const GURL& referrer, |
| 68 int open_disposition)); | 69 int open_disposition)); |
| 69 MOCK_METHOD1(GoToHistoryOffset, void(int offset)); | 70 MOCK_METHOD1(GoToHistoryOffset, void(int offset)); |
| 70 MOCK_METHOD3(MessageToHost, void(const std::string& message, | 71 MOCK_METHOD3(MessageToHost, void(const std::string& message, |
| 71 const std::string& origin, const std::string& target)); | 72 const std::string& origin, const std::string& target)); |
| 72 | 73 |
| 73 // Misc. UI. | 74 // Misc. UI. |
| 74 MOCK_METHOD1(HandleAccelerator, void(const MSG& accel_message)); | 75 MOCK_METHOD1(HandleAccelerator, void(const MSG& accel_message)); |
| 75 MOCK_METHOD3(HandleContextMenu, void(HANDLE menu_handle, int align_flags, | 76 MOCK_METHOD3(HandleContextMenu, void(HANDLE menu_handle, int align_flags, |
| 76 const IPC::MiniContextMenuParams& params)); | 77 const MiniContextMenuParams& params)); |
| 77 MOCK_METHOD1(TabbedOut, void(bool reverse)); | 78 MOCK_METHOD1(TabbedOut, void(bool reverse)); |
| 78 | 79 |
| 79 // | 80 // |
| 80 MOCK_METHOD0(TabClosed, void()); | 81 MOCK_METHOD0(TabClosed, void()); |
| 81 MOCK_METHOD1(AttachTab, | 82 MOCK_METHOD1(AttachTab, void(const AttachExternalTabParams& attach_params)); |
| 82 void(const IPC::AttachExternalTabParams& attach_params)); | |
| 83 }; | 83 }; |
| 84 | 84 |
| 85 struct MockSender : public IPC::Message::Sender { | 85 struct MockSender : public IPC::Message::Sender { |
| 86 MOCK_METHOD1(Send, bool(IPC::Message* m)); | 86 MOCK_METHOD1(Send, bool(IPC::Message* m)); |
| 87 }; | 87 }; |
| 88 | 88 |
| 89 struct MockCFProxyTraits : public CFProxyTraits { | 89 struct MockCFProxyTraits : public CFProxyTraits { |
| 90 MOCK_METHOD2(DoCreateChannel, IPC::Message::Sender*(const std::string& id, | 90 MOCK_METHOD2(DoCreateChannel, IPC::Message::Sender*(const std::string& id, |
| 91 IPC::Channel::Listener* l)); | 91 IPC::Channel::Listener* l)); |
| 92 MOCK_METHOD1(CloseChannel, void(IPC::Message::Sender* s)); | 92 MOCK_METHOD1(CloseChannel, void(IPC::Message::Sender* s)); |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 ipc.StartWithOptions(base::Thread::Options(MessageLoop::TYPE_IO, 0)); | 335 ipc.StartWithOptions(base::Thread::Options(MessageLoop::TYPE_IO, 0)); |
| 336 | 336 |
| 337 StrictMock<MockChromeProxyDelegate> d1; | 337 StrictMock<MockChromeProxyDelegate> d1; |
| 338 TabsMap tab2delegate; | 338 TabsMap tab2delegate; |
| 339 SyncMsgSender queue(&tab2delegate); | 339 SyncMsgSender queue(&tab2delegate); |
| 340 | 340 |
| 341 const int kTabHandle = 6; | 341 const int kTabHandle = 6; |
| 342 const int kSessionId = 8; | 342 const int kSessionId = 8; |
| 343 | 343 |
| 344 // Create some sync messages and their replies. | 344 // Create some sync messages and their replies. |
| 345 AutomationMsg_InstallExtension m1(0, FilePath(L"c:\\awesome.x"), 0); | 345 AutomationMsg_InstallExtension m1(FilePath(L"c:\\awesome.x"), 0); |
| 346 AutomationMsg_CreateExternalTab m2(0, IPC::ExternalTabSettings(), 0, 0, 0, 0); | 346 AutomationMsg_CreateExternalTab m2(ExternalTabSettings(), 0, 0, 0, 0); |
| 347 scoped_ptr<IPC::Message> r1(CreateReply(&m1, | 347 scoped_ptr<IPC::Message> r1(CreateReply(&m1, |
| 348 AUTOMATION_MSG_EXTENSION_INSTALL_SUCCEEDED)); | 348 AUTOMATION_MSG_EXTENSION_INSTALL_SUCCEEDED)); |
| 349 scoped_ptr<IPC::Message> r2(CreateReply(&m2, (HWND)1, (HWND)2, kTabHandle, | 349 scoped_ptr<IPC::Message> r2(CreateReply(&m2, (HWND)1, (HWND)2, kTabHandle, |
| 350 kSessionId)); | 350 kSessionId)); |
| 351 | 351 |
| 352 queue.QueueSyncMessage(&m1, &d1, NULL); | 352 queue.QueueSyncMessage(&m1, &d1, NULL); |
| 353 queue.QueueSyncMessage(&m2, &d1, NULL); | 353 queue.QueueSyncMessage(&m2, &d1, NULL); |
| 354 | 354 |
| 355 testing::InSequence s; | 355 testing::InSequence s; |
| 356 EXPECT_CALL(d1, Completed_InstallExtension(true, | 356 EXPECT_CALL(d1, Completed_InstallExtension(true, |
| 357 AUTOMATION_MSG_EXTENSION_INSTALL_SUCCEEDED, NULL)); | 357 AUTOMATION_MSG_EXTENSION_INSTALL_SUCCEEDED, NULL)); |
| 358 EXPECT_CALL(d1, Completed_CreateTab(true, (HWND)1, (HWND)2, kTabHandle, | 358 EXPECT_CALL(d1, Completed_CreateTab(true, (HWND)1, (HWND)2, kTabHandle, |
| 359 kSessionId)); | 359 kSessionId)); |
| 360 | 360 |
| 361 // Execute replies in a worker thread. | 361 // Execute replies in a worker thread. |
| 362 ipc.message_loop()->PostTask(FROM_HERE, NewRunnableMethod(&queue, | 362 ipc.message_loop()->PostTask(FROM_HERE, NewRunnableMethod(&queue, |
| 363 &SyncMsgSender::OnReplyReceived, r1.get())); | 363 &SyncMsgSender::OnReplyReceived, r1.get())); |
| 364 ipc.message_loop()->PostTask(FROM_HERE, NewRunnableMethod(&queue, | 364 ipc.message_loop()->PostTask(FROM_HERE, NewRunnableMethod(&queue, |
| 365 &SyncMsgSender::OnReplyReceived, r2.get())); | 365 &SyncMsgSender::OnReplyReceived, r2.get())); |
| 366 ipc.Stop(); | 366 ipc.Stop(); |
| 367 | 367 |
| 368 // Expect that tab 6 has been associated with the delegate. | 368 // Expect that tab 6 has been associated with the delegate. |
| 369 EXPECT_EQ(&d1, tab2delegate[6]); | 369 EXPECT_EQ(&d1, tab2delegate[6]); |
| 370 } | 370 } |
| 371 | 371 |
| 372 TEST(SyncMsgSender, OnChannelClosed) { | 372 TEST(SyncMsgSender, OnChannelClosed) { |
| 373 // TODO(stoyan): implement. | 373 // TODO(stoyan): implement. |
| 374 } | 374 } |
| 375 | |
| 376 MATCHER_P(EqNavigationInfo, ni, "") { | |
| 377 return arg.navigation_type == ni.navigation_type && | |
| 378 arg.relative_offset == ni.relative_offset && | |
| 379 arg.navigation_index == ni.navigation_index && | |
| 380 arg.title == ni.title && | |
| 381 arg.url == ni.url && | |
| 382 arg.referrer == ni.referrer && | |
| 383 arg.security_style == ni.security_style && | |
| 384 arg.displayed_insecure_content == ni.displayed_insecure_content && | |
| 385 arg.ran_insecure_content == ni.ran_insecure_content; | |
| 386 } | |
| 387 | |
| 388 MATCHER_P(EqMSG, msg, "") { | |
| 389 return arg.hwnd == msg.hwnd && | |
| 390 arg.message == msg.message && | |
| 391 arg.wParam == msg.wParam && | |
| 392 arg.lParam == msg.lParam && | |
| 393 arg.time == msg.time && | |
| 394 arg.pt.x == msg.pt.x && | |
| 395 arg.pt.y == msg.pt.y; | |
| 396 } | |
| 397 | |
| 398 MATCHER_P(EqContextMenuParam, p, "") { | |
| 399 return arg.screen_x == p.screen_x && | |
| 400 arg.screen_y == p.screen_y && | |
| 401 arg.link_url == p.link_url && | |
| 402 arg.unfiltered_link_url == p.unfiltered_link_url && | |
| 403 arg.src_url == p.src_url && | |
| 404 arg.page_url == p.page_url && | |
| 405 arg.frame_url == p.frame_url; | |
| 406 } | |
| 407 | |
| 408 MATCHER_P(EqURLRequest, p, "") { | |
| 409 return arg.url == p.url && | |
| 410 arg.method == p.method && | |
| 411 arg.referrer == p.referrer && | |
| 412 arg.extra_request_headers == p.extra_request_headers && | |
| 413 // TODO(stoyan): scoped_refptr<net::UploadData> upload_data; | |
| 414 arg.resource_type == p.resource_type; | |
| 415 } | |
| 416 | |
| 417 | |
| 418 MATCHER_P(EqAttachExternalTab, p, "") { | |
| 419 return arg.cookie == p.cookie && | |
| 420 arg.url == p.url && | |
| 421 arg.dimensions == p.dimensions && | |
| 422 arg.disposition == p.disposition && | |
| 423 arg.user_gesture == p.user_gesture && | |
| 424 arg.profile_name == p.profile_name; | |
| 425 } | |
| 426 | |
| 427 TEST(Deserialize, DispatchTabMessage) { | |
| 428 testing::InSequence s; | |
| 429 StrictMock<MockChromeProxyDelegate> delegate; | |
| 430 GURL url("http://destination"); | |
| 431 GURL ref("http://referer"); | |
| 432 | |
| 433 // Tuple3<int, int, IPC::NavigationInfo> | |
| 434 int flags = 2; | |
| 435 IPC::NavigationInfo ni(2, 3, 4, L"title", url, | |
| 436 ref, SECURITY_STYLE_AUTHENTICATION_BROKEN, true, true); | |
| 437 AutomationMsg_NavigationStateChanged m1(0, 1, flags, ni); | |
| 438 EXPECT_CALL(delegate, NavigationStateChanged(flags, EqNavigationInfo(ni))); | |
| 439 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m1)); | |
| 440 | |
| 441 // Tuple2<int, std::wstring> | |
| 442 AutomationMsg_UpdateTargetUrl m2(0, 1, L"hello"); | |
| 443 EXPECT_CALL(delegate, UpdateTargetUrl(StrEq(L"hello"))); | |
| 444 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m2)); | |
| 445 | |
| 446 // Tuple2<int, MSG> | |
| 447 MSG wnd_msg = {0, WM_DESTROY, 1, 9, 0x5671, { 11, 12 }}; | |
| 448 AutomationMsg_HandleAccelerator m3(0, 1, wnd_msg); | |
| 449 EXPECT_CALL(delegate, HandleAccelerator(EqMSG(wnd_msg))); | |
| 450 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m3)); | |
| 451 | |
| 452 // Tuple2<int, bool> | |
| 453 AutomationMsg_TabbedOut m4(0, 1, true); | |
| 454 EXPECT_CALL(delegate, TabbedOut(true)); | |
| 455 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m4)); | |
| 456 | |
| 457 | |
| 458 // Tuple4<int, GURL, GURL, int> | |
| 459 AutomationMsg_OpenURL m5(0, 1, url, ref, 4); | |
| 460 EXPECT_CALL(delegate, OpenURL(url, ref, 4)); | |
| 461 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m5)); | |
| 462 | |
| 463 // Tuple3<int, int, GURL> | |
| 464 AutomationMsg_NavigationFailed m6(0, 1, 2, url); | |
| 465 EXPECT_CALL(delegate, NavigationFailed(2, url)); | |
| 466 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m6)); | |
| 467 | |
| 468 | |
| 469 // Tuple2<int, IPC::NavigationInfo> | |
| 470 AutomationMsg_DidNavigate m7(0, 1, ni); | |
| 471 EXPECT_CALL(delegate, DidNavigate(EqNavigationInfo(ni))); | |
| 472 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m7)); | |
| 473 | |
| 474 | |
| 475 // Tuple2<int, GURL> | |
| 476 AutomationMsg_TabLoaded m8(0, 1, url); | |
| 477 EXPECT_CALL(delegate, TabLoaded(url)); | |
| 478 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m8)); | |
| 479 | |
| 480 // Tuple4<int, string, string, string> | |
| 481 std::string msg("Load oranges barrels"); | |
| 482 std::string origin("Brothers Karamazov"); | |
| 483 std::string target("Alexander Ivanovich"); | |
| 484 AutomationMsg_ForwardMessageToExternalHost m9(0, 1, msg, origin, target); | |
| 485 EXPECT_CALL(delegate, MessageToHost(msg, origin, target)); | |
| 486 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m9)); | |
| 487 | |
| 488 // Tuple4<int, HANDLE, int, IPC::ContextMenuParams> | |
| 489 IPC::MiniContextMenuParams ctxmenu(711, 512, GURL("http://link_src"), | |
| 490 GURL("http://unfiltered_link_url"), GURL("http://src_url"), | |
| 491 GURL("http://page_url"), GURL("http://frame_url")); | |
| 492 AutomationMsg_ForwardContextMenuToExternalHost m10(0, 1, HANDLE(7), 4, | |
| 493 ctxmenu); | |
| 494 EXPECT_CALL(delegate, HandleContextMenu(HANDLE(7), 4, | |
| 495 EqContextMenuParam(ctxmenu))); | |
| 496 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m10)); | |
| 497 | |
| 498 // Tuple3<int, int, IPC::AutomationURLRequest> | |
| 499 IPC::AutomationURLRequest url_request("url", "post", "referer", | |
| 500 "extra_headers", 0, 3, 0); | |
| 501 AutomationMsg_RequestStart m11(0, 1, 7, url_request); | |
| 502 EXPECT_CALL(delegate, Network_Start(7, EqURLRequest(url_request))); | |
| 503 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m11)); | |
| 504 | |
| 505 // Tuple3<int, int, int> | |
| 506 AutomationMsg_RequestRead m12(0, 1, 7, 16384); | |
| 507 EXPECT_CALL(delegate, Network_Read(7, 16384)); | |
| 508 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m12)); | |
| 509 | |
| 510 // Tuple3<int, int, URLRequestStatus> | |
| 511 AutomationMsg_RequestEnd m13(0, 1, 7, URLRequestStatus()); | |
| 512 EXPECT_CALL(delegate, Network_End(7, _)); | |
| 513 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m13)); | |
| 514 | |
| 515 // Tuple2<int, int> | |
| 516 AutomationMsg_DownloadRequestInHost m14(0, 1, 7); | |
| 517 EXPECT_CALL(delegate, Network_DownloadInHost(7)); | |
| 518 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m14)); | |
| 519 | |
| 520 // Tuple3<int, GURL, string> | |
| 521 AutomationMsg_SetCookieAsync m15(0, 1, url, "cake=big"); | |
| 522 EXPECT_CALL(delegate, SetCookie(url, "cake=big")); | |
| 523 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m15)); | |
| 524 | |
| 525 // Tuple2<int, IPC::AttachExternalTabParams> | |
| 526 IPC::AttachExternalTabParams ext_tab(0xFEDCBA0987654321i64, url, | |
| 527 gfx::Rect(6, 9, 123, 999), 1, | |
| 528 false, "theprofile"); | |
| 529 AutomationMsg_AttachExternalTab m16(0, 1, ext_tab); | |
| 530 EXPECT_CALL(delegate, AttachTab(EqAttachExternalTab(ext_tab))); | |
| 531 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m16)); | |
| 532 | |
| 533 // Tuple2<int, int> | |
| 534 AutomationMsg_RequestGoToHistoryEntryOffset m17(0, 1, -4); | |
| 535 EXPECT_CALL(delegate, GoToHistoryOffset(-4)); | |
| 536 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m17)); | |
| 537 | |
| 538 // Tuple3<int, GURL, int> | |
| 539 AutomationMsg_GetCookiesFromHost m18(0, 1, url, 903); | |
| 540 EXPECT_CALL(delegate, GetCookies(url, 903)); | |
| 541 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m18)); | |
| 542 | |
| 543 AutomationMsg_CloseExternalTab m19(0, 1); | |
| 544 EXPECT_CALL(delegate, TabClosed()); | |
| 545 EXPECT_TRUE(DispatchTabMessageToDelegate(&delegate, m19)); | |
| 546 } | |
| OLD | NEW |