OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/extensions/api/web_navigation/frame_navigation_state.h" | 5 #include "chrome/browser/extensions/api/web_navigation/frame_navigation_state.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "chrome/common/url_constants.h" | 8 #include "chrome/common/url_constants.h" |
9 #include "extensions/common/constants.h" | 9 #include "extensions/common/constants.h" |
10 | 10 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 const FrameNavigationState::FrameID& other) const { | 48 const FrameNavigationState::FrameID& other) const { |
49 return frame_num == other.frame_num && | 49 return frame_num == other.frame_num && |
50 render_view_host == other.render_view_host; | 50 render_view_host == other.render_view_host; |
51 } | 51 } |
52 | 52 |
53 bool FrameNavigationState::FrameID::operator!=( | 53 bool FrameNavigationState::FrameID::operator!=( |
54 const FrameNavigationState::FrameID& other) const { | 54 const FrameNavigationState::FrameID& other) const { |
55 return !(*this == other); | 55 return !(*this == other); |
56 } | 56 } |
57 | 57 |
| 58 FrameNavigationState::FrameState::FrameState() {} |
| 59 |
58 // static | 60 // static |
59 bool FrameNavigationState::allow_extension_scheme_ = false; | 61 bool FrameNavigationState::allow_extension_scheme_ = false; |
60 | 62 |
61 FrameNavigationState::FrameNavigationState() {} | 63 FrameNavigationState::FrameNavigationState() {} |
62 | 64 |
63 FrameNavigationState::~FrameNavigationState() {} | 65 FrameNavigationState::~FrameNavigationState() {} |
64 | 66 |
65 bool FrameNavigationState::CanSendEvents(FrameID frame_id) const { | 67 bool FrameNavigationState::CanSendEvents(FrameID frame_id) const { |
66 FrameIdToStateMap::const_iterator frame_state = | 68 FrameIdToStateMap::const_iterator frame_state = |
67 frame_state_map_.find(frame_id); | 69 frame_state_map_.find(frame_id); |
68 if (frame_state == frame_state_map_.end() || | 70 if (frame_state == frame_state_map_.end() || |
69 frame_state->second.error_occurred) { | 71 frame_state->second.error_occurred) { |
70 return false; | 72 return false; |
71 } | 73 } |
72 return IsValidUrl(frame_state->second.url); | 74 return IsValidUrl(frame_state->second.url); |
73 } | 75 } |
74 | 76 |
75 bool FrameNavigationState::IsValidUrl(const GURL& url) const { | 77 bool FrameNavigationState::IsValidUrl(const GURL& url) const { |
76 for (unsigned i = 0; i < arraysize(kValidSchemes); ++i) { | 78 for (unsigned i = 0; i < arraysize(kValidSchemes); ++i) { |
77 if (url.scheme() == kValidSchemes[i]) | 79 if (url.scheme() == kValidSchemes[i]) |
78 return true; | 80 return true; |
79 } | 81 } |
80 // Allow about:blank. | 82 // Allow about:blank and about:srcdoc. |
81 if (url.spec() == chrome::kAboutBlankURL) | 83 if (url.spec() == chrome::kAboutBlankURL || |
| 84 url.spec() == chrome::kAboutSrcDocURL) { |
82 return true; | 85 return true; |
| 86 } |
83 if (allow_extension_scheme_ && url.scheme() == extensions::kExtensionScheme) | 87 if (allow_extension_scheme_ && url.scheme() == extensions::kExtensionScheme) |
84 return true; | 88 return true; |
85 return false; | 89 return false; |
86 } | 90 } |
87 | 91 |
88 void FrameNavigationState::TrackFrame(FrameID frame_id, | 92 void FrameNavigationState::TrackFrame(FrameID frame_id, |
89 FrameID parent_frame_id, | 93 FrameID parent_frame_id, |
90 const GURL& url, | 94 const GURL& url, |
91 bool is_main_frame, | 95 bool is_main_frame, |
92 bool is_error_page) { | 96 bool is_error_page, |
| 97 bool is_iframe_srcdoc) { |
93 FrameState& frame_state = frame_state_map_[frame_id]; | 98 FrameState& frame_state = frame_state_map_[frame_id]; |
94 frame_state.error_occurred = is_error_page; | 99 frame_state.error_occurred = is_error_page; |
95 frame_state.url = url; | 100 frame_state.url = url; |
96 frame_state.is_main_frame = is_main_frame; | 101 frame_state.is_main_frame = is_main_frame; |
| 102 frame_state.is_iframe_srcdoc = is_iframe_srcdoc; |
| 103 DCHECK(!is_iframe_srcdoc || url == GURL(chrome::kAboutBlankURL)); |
97 frame_state.is_navigating = true; | 104 frame_state.is_navigating = true; |
98 frame_state.is_committed = false; | 105 frame_state.is_committed = false; |
99 frame_state.is_server_redirected = false; | 106 frame_state.is_server_redirected = false; |
100 if (!is_main_frame) { | 107 if (!is_main_frame) { |
101 frame_state.parent_frame_num = parent_frame_id.frame_num; | 108 frame_state.parent_frame_num = parent_frame_id.frame_num; |
102 } else { | 109 } else { |
103 DCHECK(parent_frame_id.frame_num == -1); | 110 DCHECK(parent_frame_id.frame_num == -1); |
104 frame_state.parent_frame_num = -1; | 111 frame_state.parent_frame_num = -1; |
105 } | 112 } |
106 frame_ids_.insert(frame_id); | 113 frame_ids_.insert(frame_id); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 return (frame_state != frame_state_map_.end()); | 146 return (frame_state != frame_state_map_.end()); |
140 } | 147 } |
141 | 148 |
142 GURL FrameNavigationState::GetUrl(FrameID frame_id) const { | 149 GURL FrameNavigationState::GetUrl(FrameID frame_id) const { |
143 FrameIdToStateMap::const_iterator frame_state = | 150 FrameIdToStateMap::const_iterator frame_state = |
144 frame_state_map_.find(frame_id); | 151 frame_state_map_.find(frame_id); |
145 if (frame_state == frame_state_map_.end()) { | 152 if (frame_state == frame_state_map_.end()) { |
146 NOTREACHED(); | 153 NOTREACHED(); |
147 return GURL(); | 154 return GURL(); |
148 } | 155 } |
| 156 if (frame_state->second.is_iframe_srcdoc) |
| 157 return GURL(chrome::kAboutSrcDocURL); |
149 return frame_state->second.url; | 158 return frame_state->second.url; |
150 } | 159 } |
151 | 160 |
152 bool FrameNavigationState::IsMainFrame(FrameID frame_id) const { | 161 bool FrameNavigationState::IsMainFrame(FrameID frame_id) const { |
153 FrameIdToStateMap::const_iterator frame_state = | 162 FrameIdToStateMap::const_iterator frame_state = |
154 frame_state_map_.find(frame_id); | 163 frame_state_map_.find(frame_id); |
155 return (frame_state != frame_state_map_.end() && | 164 return (frame_state != frame_state_map_.end() && |
156 frame_state->second.is_main_frame); | 165 frame_state->second.is_main_frame); |
157 } | 166 } |
158 | 167 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 } | 225 } |
217 | 226 |
218 bool FrameNavigationState::GetIsServerRedirected(FrameID frame_id) const { | 227 bool FrameNavigationState::GetIsServerRedirected(FrameID frame_id) const { |
219 FrameIdToStateMap::const_iterator frame_state = | 228 FrameIdToStateMap::const_iterator frame_state = |
220 frame_state_map_.find(frame_id); | 229 frame_state_map_.find(frame_id); |
221 return (frame_state != frame_state_map_.end() && | 230 return (frame_state != frame_state_map_.end() && |
222 frame_state->second.is_server_redirected); | 231 frame_state->second.is_server_redirected); |
223 } | 232 } |
224 | 233 |
225 } // namespace extensions | 234 } // namespace extensions |
OLD | NEW |