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

Side by Side Diff: chrome_frame/cfproxy_test.cc

Issue 5998006: Clean up Automation and Chrome Frame IPC code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 12 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 | Annotate | Revision Log
« no previous file with comments | « chrome_frame/cfproxy_support.cc ('k') | chrome_frame/chrome_active_document.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « chrome_frame/cfproxy_support.cc ('k') | chrome_frame/chrome_active_document.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698