15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/web_navigation/frame_navigation_state.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/browser/render_frame_host.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/constants.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URL schemes for which we'll send events.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kValidSchemes[] = {
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    content::kChromeUIScheme,
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    url::kHttpScheme,
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    url::kHttpsScheme,
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    url::kFileScheme,
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    url::kFtpScheme,
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    url::kJavaScriptScheme,
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    url::kDataScheme,
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    url::kFileSystemScheme,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)FrameNavigationState::FrameState::FrameState() {}
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool FrameNavigationState::allow_extension_scheme_ = false;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35116680a4aac90f2aa7413d9095a592090648e557Ben MurdochFrameNavigationState::FrameNavigationState() : main_frame_host_(NULL) {
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FrameNavigationState::~FrameNavigationState() {}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool FrameNavigationState::CanSendEvents(
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) const {
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::const_iterator it =
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      frame_host_state_map_.find(frame_host);
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (it == frame_host_state_map_.end() || it->second.error_occurred) {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return IsValidUrl(it->second.url);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool FrameNavigationState::IsValidUrl(const GURL& url) const {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (unsigned i = 0; i < arraysize(kValidSchemes); ++i) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (url.scheme() == kValidSchemes[i])
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Allow about:blank and about:srcdoc.
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (url.spec() == url::kAboutBlankURL ||
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      url.spec() == content::kAboutSrcDocURL) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return allow_extension_scheme_ && url.scheme() == kExtensionScheme;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid FrameNavigationState::TrackFrame(content::RenderFrameHost* frame_host,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      const GURL& url,
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      bool is_error_page,
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      bool is_iframe_srcdoc) {
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameState& frame_state = frame_host_state_map_[frame_host];
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  frame_state.error_occurred = is_error_page;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  frame_state.url = url;
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  frame_state.is_iframe_srcdoc = is_iframe_srcdoc;
71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DCHECK(!is_iframe_srcdoc || url == GURL(url::kAboutBlankURL));
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  frame_state.is_navigating = true;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  frame_state.is_committed = false;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  frame_state.is_server_redirected = false;
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  frame_state.is_parsing = true;
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  frame_hosts_.insert(frame_host);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid FrameNavigationState::FrameDetached(content::RenderFrameHost* frame_host) {
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (frame_host == main_frame_host_)
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    main_frame_host_ = NULL;
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  frame_host_state_map_.erase(frame_host);
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  frame_hosts_.erase(frame_host);
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FrameNavigationState::StopTrackingFramesInRVH(
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RenderViewHost* render_view_host,
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host_to_skip) {
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  for (std::set<content::RenderFrameHost*>::iterator it = frame_hosts_.begin();
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch       it != frame_hosts_.end();) {
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if ((*it)->GetRenderViewHost() != render_view_host ||
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        *it == frame_host_to_skip) {
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ++it;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      continue;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (*it == main_frame_host_)
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      main_frame_host_ = NULL;
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    frame_host_state_map_.erase(*it);
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    frame_hosts_.erase(it++);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid FrameNavigationState::UpdateFrame(content::RenderFrameHost* frame_host,
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                       const GURL& url) {
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::iterator it = frame_host_state_map_.find(frame_host);
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (it == frame_host_state_map_.end()) {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  it->second.url = url;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool FrameNavigationState::IsValidFrame(
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) const {
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return frame_host_state_map_.find(frame_host) != frame_host_state_map_.end();
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
118116680a4aac90f2aa7413d9095a592090648e557Ben MurdochGURL FrameNavigationState::GetUrl(content::RenderFrameHost* frame_host) const {
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::const_iterator it =
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      frame_host_state_map_.find(frame_host);
121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (it == frame_host_state_map_.end()) {
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return GURL();
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (it->second.is_iframe_srcdoc)
12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return GURL(content::kAboutSrcDocURL);
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return it->second.url;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdochcontent::RenderFrameHost* FrameNavigationState::GetLastCommittedMainFrameHost()
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const {
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return main_frame_host_;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid FrameNavigationState::SetErrorOccurredInFrame(
136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) {
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::iterator it = frame_host_state_map_.find(frame_host);
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (it == frame_host_state_map_.end()) {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  it->second.error_occurred = true;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool FrameNavigationState::GetErrorOccurredInFrame(
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) const {
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::const_iterator it =
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      frame_host_state_map_.find(frame_host);
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DCHECK(it != frame_host_state_map_.end());
150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return it == frame_host_state_map_.end() || it->second.error_occurred;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid FrameNavigationState::SetNavigationCompleted(
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) {
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::iterator it = frame_host_state_map_.find(frame_host);
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (it == frame_host_state_map_.end()) {
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    NOTREACHED();
158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return;
159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  it->second.is_navigating = false;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool FrameNavigationState::GetNavigationCompleted(
164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) const {
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::const_iterator it =
166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      frame_host_state_map_.find(frame_host);
167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DCHECK(it != frame_host_state_map_.end());
168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return it == frame_host_state_map_.end() || !it->second.is_navigating;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
171116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid FrameNavigationState::SetParsingFinished(
172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) {
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::iterator it = frame_host_state_map_.find(frame_host);
174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (it == frame_host_state_map_.end()) {
175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    NOTREACHED();
176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return;
177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  it->second.is_parsing = false;
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool FrameNavigationState::GetParsingFinished(
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) const {
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::const_iterator it =
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      frame_host_state_map_.find(frame_host);
185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DCHECK(it != frame_host_state_map_.end());
186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return it == frame_host_state_map_.end() || !it->second.is_parsing;
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
189116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid FrameNavigationState::SetNavigationCommitted(
190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) {
191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::iterator it = frame_host_state_map_.find(frame_host);
192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (it == frame_host_state_map_.end()) {
193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    NOTREACHED();
194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return;
195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  it->second.is_committed = true;
197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (!frame_host->GetParent())
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    main_frame_host_ = frame_host;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
201116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool FrameNavigationState::GetNavigationCommitted(
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) const {
203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::const_iterator it =
204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      frame_host_state_map_.find(frame_host);
205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DCHECK(it != frame_host_state_map_.end());
206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return it != frame_host_state_map_.end() && it->second.is_committed;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
209116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid FrameNavigationState::SetIsServerRedirected(
210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) {
211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::iterator it = frame_host_state_map_.find(frame_host);
212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (it == frame_host_state_map_.end()) {
213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    NOTREACHED();
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return;
215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  it->second.is_server_redirected = true;
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
219116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool FrameNavigationState::GetIsServerRedirected(
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RenderFrameHost* frame_host) const {
221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FrameHostToStateMap::const_iterator it =
222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      frame_host_state_map_.find(frame_host);
223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DCHECK(it != frame_host_state_map_.end());
224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return it != frame_host_state_map_.end() && it->second.is_server_redirected;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
228