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

Side by Side Diff: components/html_viewer/html_frame_tree_manager.cc

Issue 1347023003: Rename frame classes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge 2 trunk Created 5 years, 3 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/html_viewer/html_frame_tree_manager.h" 5 #include "components/html_viewer/html_frame_tree_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 12 matching lines...) Expand all
23 #include "third_party/WebKit/public/web/WebTreeScopeType.h" 23 #include "third_party/WebKit/public/web/WebTreeScopeType.h"
24 #include "third_party/WebKit/public/web/WebView.h" 24 #include "third_party/WebKit/public/web/WebView.h"
25 #include "ui/gfx/geometry/dip_util.h" 25 #include "ui/gfx/geometry/dip_util.h"
26 #include "ui/gfx/geometry/size.h" 26 #include "ui/gfx/geometry/size.h"
27 27
28 namespace html_viewer { 28 namespace html_viewer {
29 namespace { 29 namespace {
30 30
31 // Returns the index of the FrameData with the id of |frame_id| in |index|. On 31 // Returns the index of the FrameData with the id of |frame_id| in |index|. On
32 // success returns true, otherwise false. 32 // success returns true, otherwise false.
33 bool FindFrameDataIndex(const mojo::Array<web_view::FrameDataPtr>& frame_data, 33 bool FindFrameDataIndex(
34 uint32_t frame_id, 34 const mojo::Array<web_view::mojom::FrameDataPtr>& frame_data,
35 size_t* index) { 35 uint32_t frame_id,
36 size_t* index) {
36 for (size_t i = 0; i < frame_data.size(); ++i) { 37 for (size_t i = 0; i < frame_data.size(); ++i) {
37 if (frame_data[i]->frame_id == frame_id) { 38 if (frame_data[i]->frame_id == frame_id) {
38 *index = i; 39 *index = i;
39 return true; 40 return true;
40 } 41 }
41 } 42 }
42 return false; 43 return false;
43 } 44 }
44 45
45 } // namespace 46 } // namespace
(...skipping 21 matching lines...) Expand all
67 68
68 // static 69 // static
69 HTMLFrame* HTMLFrameTreeManager::CreateFrameAndAttachToTree( 70 HTMLFrame* HTMLFrameTreeManager::CreateFrameAndAttachToTree(
70 GlobalState* global_state, 71 GlobalState* global_state,
71 mus::View* view, 72 mus::View* view,
72 scoped_ptr<DocumentResourceWaiter> resource_waiter, 73 scoped_ptr<DocumentResourceWaiter> resource_waiter,
73 HTMLFrameDelegate* delegate) { 74 HTMLFrameDelegate* delegate) {
74 if (!instances_) 75 if (!instances_)
75 instances_ = new TreeMap; 76 instances_ = new TreeMap;
76 77
77 mojo::InterfaceRequest<web_view::FrameTreeClient> frame_tree_client_request; 78 mojo::InterfaceRequest<web_view::mojom::FrameClient> frame_client_request;
78 web_view::FrameTreeServerPtr frame_tree_server; 79 web_view::mojom::FramePtr server_frame;
79 mojo::Array<web_view::FrameDataPtr> frame_data; 80 mojo::Array<web_view::mojom::FrameDataPtr> frame_data;
80 uint32_t change_id; 81 uint32_t change_id;
81 uint32_t view_id; 82 uint32_t view_id;
82 web_view::ViewConnectType view_connect_type; 83 web_view::mojom::ViewConnectType view_connect_type;
83 web_view::FrameTreeClient::OnConnectCallback on_connect_callback; 84 web_view::mojom::FrameClient::OnConnectCallback on_connect_callback;
84 resource_waiter->Release(&frame_tree_client_request, &frame_tree_server, 85 resource_waiter->Release(&frame_client_request, &server_frame, &frame_data,
85 &frame_data, &change_id, &view_id, 86 &change_id, &view_id, &view_connect_type,
86 &view_connect_type, &on_connect_callback); 87 &on_connect_callback);
87 resource_waiter.reset(); 88 resource_waiter.reset();
88 89
89 on_connect_callback.Run(); 90 on_connect_callback.Run();
90 91
91 HTMLFrameTreeManager* frame_tree = 92 HTMLFrameTreeManager* frame_tree =
92 FindFrameTreeWithRoot(frame_data[0]->frame_id); 93 FindFrameTreeWithRoot(frame_data[0]->frame_id);
93 94
94 DCHECK(!frame_tree || change_id <= frame_tree->change_id_); 95 DCHECK(!frame_tree || change_id <= frame_tree->change_id_);
95 96
96 if (view_connect_type == web_view::VIEW_CONNECT_TYPE_USE_EXISTING && 97 if (view_connect_type == web_view::mojom::VIEW_CONNECT_TYPE_USE_EXISTING &&
97 !frame_tree) { 98 !frame_tree) {
98 DVLOG(1) << "was told to use existing view but do not have frame tree"; 99 DVLOG(1) << "was told to use existing view but do not have frame tree";
99 return nullptr; 100 return nullptr;
100 } 101 }
101 102
102 if (!frame_tree) { 103 if (!frame_tree) {
103 frame_tree = new HTMLFrameTreeManager(global_state); 104 frame_tree = new HTMLFrameTreeManager(global_state);
104 frame_tree->Init(delegate, view, frame_data, change_id); 105 frame_tree->Init(delegate, view, frame_data, change_id);
105 if (frame_data[0]->frame_id == view->id()) 106 if (frame_data[0]->frame_id == view->id())
106 (*instances_)[frame_data[0]->frame_id] = frame_tree; 107 (*instances_)[frame_data[0]->frame_id] = frame_tree;
107 } else if (view_connect_type == web_view::VIEW_CONNECT_TYPE_USE_EXISTING) { 108 } else if (view_connect_type ==
109 web_view::mojom::VIEW_CONNECT_TYPE_USE_EXISTING) {
108 HTMLFrame* existing_frame = frame_tree->root_->FindFrame(view_id); 110 HTMLFrame* existing_frame = frame_tree->root_->FindFrame(view_id);
109 if (!existing_frame) { 111 if (!existing_frame) {
110 DVLOG(1) << "was told to use existing view but could not find view"; 112 DVLOG(1) << "was told to use existing view but could not find view";
111 return nullptr; 113 return nullptr;
112 } 114 }
113 if (!existing_frame->IsLocal()) { 115 if (!existing_frame->IsLocal()) {
114 DVLOG(1) << "was told to use existing view, but frame is remote"; 116 DVLOG(1) << "was told to use existing view, but frame is remote";
115 return nullptr; 117 return nullptr;
116 } 118 }
117 existing_frame->SwapDelegate(delegate); 119 existing_frame->SwapDelegate(delegate);
118 } else { 120 } else {
119 // We're going to share a frame tree. We should know about the frame. 121 // We're going to share a frame tree. We should know about the frame.
120 CHECK(view->id() != frame_data[0]->frame_id); 122 CHECK(view->id() != frame_data[0]->frame_id);
121 HTMLFrame* existing_frame = frame_tree->root_->FindFrame(view->id()); 123 HTMLFrame* existing_frame = frame_tree->root_->FindFrame(view->id());
122 if (existing_frame) { 124 if (existing_frame) {
123 CHECK(!existing_frame->IsLocal()); 125 CHECK(!existing_frame->IsLocal());
124 size_t frame_data_index = 0u; 126 size_t frame_data_index = 0u;
125 CHECK(FindFrameDataIndex(frame_data, view->id(), &frame_data_index)); 127 CHECK(FindFrameDataIndex(frame_data, view->id(), &frame_data_index));
126 const web_view::FrameDataPtr& data = frame_data[frame_data_index]; 128 const web_view::mojom::FrameDataPtr& data = frame_data[frame_data_index];
127 existing_frame->SwapToLocal(delegate, view, data->client_properties); 129 existing_frame->SwapToLocal(delegate, view, data->client_properties);
128 } else { 130 } else {
129 // If we can't find the frame and the change_id of the incoming 131 // If we can't find the frame and the change_id of the incoming
130 // tree is before the change id we've processed, then we removed the 132 // tree is before the change id we've processed, then we removed the
131 // frame and need do nothing. 133 // frame and need do nothing.
132 if (change_id < frame_tree->change_id_) 134 if (change_id < frame_tree->change_id_)
133 return nullptr; 135 return nullptr;
134 136
135 // We removed the frame but it hasn't been acked yet. 137 // We removed the frame but it hasn't been acked yet.
136 if (frame_tree->pending_remove_ids_.count(view->id())) 138 if (frame_tree->pending_remove_ids_.count(view->id()))
137 return nullptr; 139 return nullptr;
138 140
139 // We don't know about the frame, but should. Something is wrong. 141 // We don't know about the frame, but should. Something is wrong.
140 DVLOG(1) << "unable to locate frame to attach to"; 142 DVLOG(1) << "unable to locate frame to attach to";
141 return nullptr; 143 return nullptr;
142 } 144 }
143 } 145 }
144 146
145 HTMLFrame* frame = frame_tree->root_->FindFrame(view_id); 147 HTMLFrame* frame = frame_tree->root_->FindFrame(view_id);
146 DCHECK(frame); 148 DCHECK(frame);
147 frame->Bind(frame_tree_server.Pass(), frame_tree_client_request.Pass()); 149 frame->Bind(server_frame.Pass(), frame_client_request.Pass());
148 return frame; 150 return frame;
149 } 151 }
150 152
151 // static 153 // static
152 HTMLFrameTreeManager* HTMLFrameTreeManager::FindFrameTreeWithRoot( 154 HTMLFrameTreeManager* HTMLFrameTreeManager::FindFrameTreeWithRoot(
153 uint32_t root_frame_id) { 155 uint32_t root_frame_id) {
154 return (!base::CommandLine::ForCurrentProcess()->HasSwitch( 156 return (!base::CommandLine::ForCurrentProcess()->HasSwitch(
155 web_view::switches::kOOPIFAlwaysCreateNewFrameTree) && 157 web_view::switches::kOOPIFAlwaysCreateNewFrameTree) &&
156 instances_ && instances_->count(root_frame_id)) 158 instances_ && instances_->count(root_frame_id))
157 ? (*instances_)[root_frame_id] 159 ? (*instances_)[root_frame_id]
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 DCHECK(!root_ || !local_root_); 199 DCHECK(!root_ || !local_root_);
198 RemoveFromInstances(); 200 RemoveFromInstances();
199 201
200 FOR_EACH_OBSERVER(HTMLFrameTreeManagerObserver, observers_, 202 FOR_EACH_OBSERVER(HTMLFrameTreeManagerObserver, observers_,
201 OnHTMLFrameTreeManagerDestroyed()); 203 OnHTMLFrameTreeManagerDestroyed());
202 } 204 }
203 205
204 void HTMLFrameTreeManager::Init( 206 void HTMLFrameTreeManager::Init(
205 HTMLFrameDelegate* delegate, 207 HTMLFrameDelegate* delegate,
206 mus::View* local_view, 208 mus::View* local_view,
207 const mojo::Array<web_view::FrameDataPtr>& frame_data, 209 const mojo::Array<web_view::mojom::FrameDataPtr>& frame_data,
208 uint32_t change_id) { 210 uint32_t change_id) {
209 change_id_ = change_id; 211 change_id_ = change_id;
210 root_ = BuildFrameTree(delegate, frame_data, local_view->id(), local_view); 212 root_ = BuildFrameTree(delegate, frame_data, local_view->id(), local_view);
211 local_root_ = root_->FindFrame(local_view->id()); 213 local_root_ = root_->FindFrame(local_view->id());
212 CHECK(local_root_); 214 CHECK(local_root_);
213 local_root_->UpdateFocus(); 215 local_root_->UpdateFocus();
214 } 216 }
215 217
216 HTMLFrame* HTMLFrameTreeManager::BuildFrameTree( 218 HTMLFrame* HTMLFrameTreeManager::BuildFrameTree(
217 HTMLFrameDelegate* delegate, 219 HTMLFrameDelegate* delegate,
218 const mojo::Array<web_view::FrameDataPtr>& frame_data, 220 const mojo::Array<web_view::mojom::FrameDataPtr>& frame_data,
219 uint32_t local_frame_id, 221 uint32_t local_frame_id,
220 mus::View* local_view) { 222 mus::View* local_view) {
221 std::vector<HTMLFrame*> parents; 223 std::vector<HTMLFrame*> parents;
222 HTMLFrame* root = nullptr; 224 HTMLFrame* root = nullptr;
223 HTMLFrame* last_frame = nullptr; 225 HTMLFrame* last_frame = nullptr;
224 for (size_t i = 0; i < frame_data.size(); ++i) { 226 for (size_t i = 0; i < frame_data.size(); ++i) {
225 if (last_frame && frame_data[i]->parent_id == last_frame->id()) { 227 if (last_frame && frame_data[i]->parent_id == last_frame->id()) {
226 parents.push_back(last_frame); 228 parents.push_back(last_frame);
227 } else if (!parents.empty()) { 229 } else if (!parents.empty()) {
228 while (parents.back()->id() != frame_data[i]->parent_id) 230 while (parents.back()->id() != frame_data[i]->parent_id)
(...skipping 21 matching lines...) Expand all
250 if (pair.second == this) { 252 if (pair.second == this) {
251 instances_->erase(pair.first); 253 instances_->erase(pair.first);
252 return; 254 return;
253 } 255 }
254 } 256 }
255 } 257 }
256 258
257 bool HTMLFrameTreeManager::PrepareForStructureChange(HTMLFrame* source, 259 bool HTMLFrameTreeManager::PrepareForStructureChange(HTMLFrame* source,
258 uint32_t change_id) { 260 uint32_t change_id) {
259 // The change ids may differ if multiple HTMLDocuments are attached to the 261 // The change ids may differ if multiple HTMLDocuments are attached to the
260 // same tree (which means we have multiple FrameTreeClients for the same 262 // same tree (which means we have multiple FrameClient for the same tree).
261 // tree).
262 if (change_id != (change_id_ + 1)) 263 if (change_id != (change_id_ + 1))
263 return false; 264 return false;
264 265
265 // We only process changes for the topmost local root. 266 // We only process changes for the topmost local root.
266 if (source != local_root_) 267 if (source != local_root_)
267 return false; 268 return false;
268 269
269 // Update the id as the change is going to be applied (or we can assume it 270 // Update the id as the change is going to be applied (or we can assume it
270 // will be applied if we get here). 271 // will be applied if we get here).
271 change_id_ = change_id; 272 change_id_ = change_id;
272 return true; 273 return true;
273 } 274 }
274 275
275 void HTMLFrameTreeManager::ProcessOnFrameAdded( 276 void HTMLFrameTreeManager::ProcessOnFrameAdded(
276 HTMLFrame* source, 277 HTMLFrame* source,
277 uint32_t change_id, 278 uint32_t change_id,
278 web_view::FrameDataPtr frame_data) { 279 web_view::mojom::FrameDataPtr frame_data) {
279 if (!PrepareForStructureChange(source, change_id)) 280 if (!PrepareForStructureChange(source, change_id))
280 return; 281 return;
281 282
282 ChangeIdAdvancedNotifier notifier(&observers_); 283 ChangeIdAdvancedNotifier notifier(&observers_);
283 284
284 HTMLFrame* parent = root_->FindFrame(frame_data->parent_id); 285 HTMLFrame* parent = root_->FindFrame(frame_data->parent_id);
285 if (!parent) { 286 if (!parent) {
286 DVLOG(1) << "Received invalid parent in OnFrameAdded " 287 DVLOG(1) << "Received invalid parent in OnFrameAdded "
287 << frame_data->parent_id; 288 << frame_data->parent_id;
288 return; 289 return;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 mojo::Array<uint8_t> new_data) { 352 mojo::Array<uint8_t> new_data) {
352 if (source != local_root_) 353 if (source != local_root_)
353 return; 354 return;
354 355
355 HTMLFrame* frame = root_->FindFrame(frame_id); 356 HTMLFrame* frame = root_->FindFrame(frame_id);
356 if (frame) 357 if (frame)
357 frame->SetValueFromClientProperty(name, new_data.Pass()); 358 frame->SetValueFromClientProperty(name, new_data.Pass());
358 } 359 }
359 360
360 } // namespace mojo 361 } // namespace mojo
OLDNEW
« no previous file with comments | « components/html_viewer/html_frame_tree_manager.h ('k') | components/web_view/client_initiated_frame_connection.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698