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

Side by Side Diff: chrome/browser/extensions/api/web_navigation/frame_navigation_state.cc

Issue 11791018: When an iframe displays its srcdoc, generate navigation events for about:srcdoc (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698