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