OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/guest_view/browser/test_guest_view_manager.h" | 5 #include "components/guest_view/browser/test_guest_view_manager.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "components/guest_view/browser/guest_view_manager_delegate.h" | 8 #include "components/guest_view/browser/guest_view_manager_delegate.h" |
9 | 9 |
10 namespace guest_view { | 10 namespace guest_view { |
11 | 11 |
12 TestGuestViewManager::TestGuestViewManager( | 12 TestGuestViewManager::TestGuestViewManager( |
13 content::BrowserContext* context, | 13 content::BrowserContext* context, |
14 scoped_ptr<GuestViewManagerDelegate> delegate) | 14 scoped_ptr<GuestViewManagerDelegate> delegate) |
15 : GuestViewManager(context, delegate.Pass()), | 15 : GuestViewManager(context, delegate.Pass()), |
16 num_embedder_processes_destroyed_(0), | 16 num_embedder_processes_destroyed_(0), |
17 num_guests_created_(0), | 17 num_guests_created_(0), |
18 num_views_garbage_collected_(0) { | 18 expected_num_guests_created_(0), |
| 19 num_views_garbage_collected_(0), |
| 20 waiting_for_guests_created_(false) { |
19 } | 21 } |
20 | 22 |
21 TestGuestViewManager::~TestGuestViewManager() { | 23 TestGuestViewManager::~TestGuestViewManager() { |
22 } | 24 } |
23 | 25 |
24 size_t TestGuestViewManager::GetNumGuestsActive() const { | 26 size_t TestGuestViewManager::GetNumGuestsActive() const { |
25 return guest_web_contents_by_instance_id_.size(); | 27 return guest_web_contents_by_instance_id_.size(); |
26 } | 28 } |
27 | 29 |
28 size_t TestGuestViewManager::GetNumRemovedInstanceIDs() const { | 30 size_t TestGuestViewManager::GetNumRemovedInstanceIDs() const { |
(...skipping 15 matching lines...) Expand all Loading... |
44 // Make sure that every guest that was created has been removed. | 46 // Make sure that every guest that was created has been removed. |
45 for (auto& watcher : guest_web_contents_watchers_) | 47 for (auto& watcher : guest_web_contents_watchers_) |
46 watcher->Wait(); | 48 watcher->Wait(); |
47 } | 49 } |
48 | 50 |
49 void TestGuestViewManager::WaitForLastGuestDeleted() { | 51 void TestGuestViewManager::WaitForLastGuestDeleted() { |
50 // Wait for the last guest that was created to be deleted. | 52 // Wait for the last guest that was created to be deleted. |
51 guest_web_contents_watchers_.back()->Wait(); | 53 guest_web_contents_watchers_.back()->Wait(); |
52 }; | 54 }; |
53 | 55 |
54 void TestGuestViewManager::WaitForGuestCreated() { | |
55 created_message_loop_runner_ = new content::MessageLoopRunner; | |
56 created_message_loop_runner_->Run(); | |
57 } | |
58 | |
59 content::WebContents* TestGuestViewManager::WaitForSingleGuestCreated() { | 56 content::WebContents* TestGuestViewManager::WaitForSingleGuestCreated() { |
60 if (!GetNumGuestsActive()) { | 57 if (!GetNumGuestsActive()) { |
61 // Guests have been created and subsequently destroyed. | 58 // Guests have been created and subsequently destroyed. |
62 if (num_guests_created() > 0) | 59 if (num_guests_created() > 0) |
63 return nullptr; | 60 return nullptr; |
64 WaitForGuestCreated(); | 61 WaitForNumGuestsCreated(1u); |
65 } | 62 } |
66 | 63 |
67 return GetLastGuestCreated(); | 64 return GetLastGuestCreated(); |
68 } | 65 } |
69 | 66 |
| 67 void TestGuestViewManager::WaitForNumGuestsCreated(size_t count) { |
| 68 if (count == num_guests_created_) |
| 69 return; |
| 70 |
| 71 waiting_for_guests_created_ = true; |
| 72 expected_num_guests_created_ = count; |
| 73 |
| 74 created_message_loop_runner_ = new content::MessageLoopRunner; |
| 75 created_message_loop_runner_->Run(); |
| 76 } |
| 77 |
70 void TestGuestViewManager::WaitForViewGarbageCollected() { | 78 void TestGuestViewManager::WaitForViewGarbageCollected() { |
71 gc_message_loop_runner_ = new content::MessageLoopRunner; | 79 gc_message_loop_runner_ = new content::MessageLoopRunner; |
72 gc_message_loop_runner_->Run(); | 80 gc_message_loop_runner_->Run(); |
73 } | 81 } |
74 | 82 |
75 void TestGuestViewManager::WaitForSingleViewGarbageCollected() { | 83 void TestGuestViewManager::WaitForSingleViewGarbageCollected() { |
76 if (!num_views_garbage_collected()) | 84 if (!num_views_garbage_collected()) |
77 WaitForViewGarbageCollected(); | 85 WaitForViewGarbageCollected(); |
78 } | 86 } |
79 | 87 |
80 void TestGuestViewManager::AddGuest(int guest_instance_id, | 88 void TestGuestViewManager::AddGuest(int guest_instance_id, |
81 content::WebContents* guest_web_contents) { | 89 content::WebContents* guest_web_contents) { |
82 GuestViewManager::AddGuest(guest_instance_id, guest_web_contents); | 90 GuestViewManager::AddGuest(guest_instance_id, guest_web_contents); |
83 | 91 |
84 guest_web_contents_watchers_.push_back( | 92 guest_web_contents_watchers_.push_back( |
85 linked_ptr<content::WebContentsDestroyedWatcher>( | 93 linked_ptr<content::WebContentsDestroyedWatcher>( |
86 new content::WebContentsDestroyedWatcher(guest_web_contents))); | 94 new content::WebContentsDestroyedWatcher(guest_web_contents))); |
87 | 95 |
88 ++num_guests_created_; | 96 ++num_guests_created_; |
| 97 if (!waiting_for_guests_created_ && |
| 98 num_guests_created_ != expected_num_guests_created_) { |
| 99 return; |
| 100 } |
89 | 101 |
90 if (created_message_loop_runner_.get()) | 102 if (created_message_loop_runner_.get()) |
91 created_message_loop_runner_->Quit(); | 103 created_message_loop_runner_->Quit(); |
92 } | 104 } |
93 | 105 |
| 106 void TestGuestViewManager::GetGuestWebContentsList( |
| 107 std::vector<content::WebContents*>* guest_web_contents_list) { |
| 108 for (auto& watcher : guest_web_contents_watchers_) |
| 109 guest_web_contents_list->push_back(watcher->web_contents()); |
| 110 } |
| 111 |
94 void TestGuestViewManager::RemoveGuest(int guest_instance_id) { | 112 void TestGuestViewManager::RemoveGuest(int guest_instance_id) { |
95 GuestViewManager::RemoveGuest(guest_instance_id); | 113 GuestViewManager::RemoveGuest(guest_instance_id); |
96 } | 114 } |
97 | 115 |
98 void TestGuestViewManager::EmbedderWillBeDestroyed(int embedder_process_id) { | 116 void TestGuestViewManager::EmbedderWillBeDestroyed(int embedder_process_id) { |
99 ++num_embedder_processes_destroyed_; | 117 ++num_embedder_processes_destroyed_; |
100 GuestViewManager::EmbedderWillBeDestroyed(embedder_process_id); | 118 GuestViewManager::EmbedderWillBeDestroyed(embedder_process_id); |
101 } | 119 } |
102 | 120 |
103 void TestGuestViewManager::ViewGarbageCollected(int embedder_process_id, | 121 void TestGuestViewManager::ViewGarbageCollected(int embedder_process_id, |
(...skipping 16 matching lines...) Expand all Loading... |
120 content::BrowserContext* context, | 138 content::BrowserContext* context, |
121 scoped_ptr<GuestViewManagerDelegate> delegate) { | 139 scoped_ptr<GuestViewManagerDelegate> delegate) { |
122 if (!test_guest_view_manager_) { | 140 if (!test_guest_view_manager_) { |
123 test_guest_view_manager_ = | 141 test_guest_view_manager_ = |
124 new TestGuestViewManager(context, delegate.Pass()); | 142 new TestGuestViewManager(context, delegate.Pass()); |
125 } | 143 } |
126 return test_guest_view_manager_; | 144 return test_guest_view_manager_; |
127 } | 145 } |
128 | 146 |
129 } // namespace guest_view | 147 } // namespace guest_view |
OLD | NEW |