OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "blimp/engine/session/page_load_tracker.h" | |
6 | |
7 #include "content/public/browser/render_widget_host_view.h" | |
8 | |
9 namespace blimp { | |
10 namespace engine { | |
11 | |
12 namespace { | |
13 | |
14 content::RenderWidgetHost* GetRenderWidgetHostIfMainFrame( | |
15 content::RenderFrameHost* render_frame_host) { | |
16 if (render_frame_host->GetParent() != nullptr) | |
17 return nullptr; | |
18 | |
19 return render_frame_host->GetView()->GetRenderWidgetHost(); | |
20 } | |
21 | |
22 } // namespace | |
23 | |
24 PageLoadTracker::PageLoadTracker(PageLoadTrackerClient* client) | |
25 : client_(client) {} | |
26 | |
27 PageLoadTracker::~PageLoadTracker() {} | |
28 | |
29 void PageLoadTracker::DidStartProvisionalLoadForFrame( | |
30 content::RenderFrameHost* render_frame_host) { | |
31 content::RenderWidgetHost* render_widget_host = | |
32 GetRenderWidgetHostIfMainFrame(render_frame_host); | |
33 if (!render_widget_host) | |
34 return; | |
35 | |
36 render_widget_load_status_[render_widget_host] = LoadStatus(); | |
37 | |
38 // Notify the client that a navigation was initiated. | |
39 client_->SendPageLoadStatusUpdate(false); | |
mdjones
2016/05/18 20:30:00
This call feels like you are switching the loading
Khushal
2016/05/18 21:16:58
Hmmm, I guess I was looking at it as the engine co
| |
40 } | |
41 | |
42 void PageLoadTracker::DidFinishLoad( | |
43 content::RenderFrameHost* render_frame_host) { | |
44 content::RenderWidgetHost* render_widget_host = | |
45 GetRenderWidgetHostIfMainFrame(render_frame_host); | |
46 if (!render_widget_host) | |
47 return; | |
48 | |
49 RenderWidgetLoadStatusMap::iterator it = | |
50 render_widget_load_status_.find(render_widget_host); | |
51 DCHECK(it != render_widget_load_status_.end()); | |
52 | |
53 it->second.page_loaded = true; | |
54 if (it->second.Loaded()) { | |
55 client_->SendPageLoadStatusUpdate(true); | |
56 render_widget_load_status_.erase(it); | |
57 } | |
58 } | |
59 | |
60 void PageLoadTracker::DidFailLoad(content::RenderFrameHost* render_frame_host) { | |
61 content::RenderWidgetHost* render_widget_host = | |
62 GetRenderWidgetHostIfMainFrame(render_frame_host); | |
63 if (!render_widget_host) | |
64 return; | |
65 | |
66 RenderWidgetLoadStatusMap::iterator it = | |
67 render_widget_load_status_.find(render_widget_host); | |
68 DCHECK(it != render_widget_load_status_.end()); | |
69 | |
70 // If the navigation failed, the client should dismiss the load indicator. | |
71 client_->SendPageLoadStatusUpdate(true); | |
72 render_widget_load_status_.erase(it); | |
73 } | |
74 | |
75 void PageLoadTracker::DidFirstPaintAfterLoad( | |
76 content::RenderWidgetHost* render_widget_host) { | |
77 RenderWidgetLoadStatusMap::iterator it = | |
78 render_widget_load_status_.find(render_widget_host); | |
79 DCHECK(it != render_widget_load_status_.end()); | |
80 | |
81 it->second.did_first_paint = true; | |
82 if (it->second.Loaded()) { | |
83 client_->SendPageLoadStatusUpdate(true); | |
84 render_widget_load_status_.erase(it); | |
85 } | |
86 } | |
87 | |
88 bool PageLoadTracker::LoadStatus::Loaded() const { | |
89 return page_loaded && did_first_paint; | |
90 } | |
91 | |
92 } // namespace engine | |
93 } // namespace blimp | |
OLD | NEW |