1 // Copyright 2014 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 "components/dom_distiller/content/web_contents_main_frame_observer.h" 6 7 #include "content/public/browser/navigation_details.h" 8 #include "content/public/browser/render_frame_host.h" 9 #include "content/public/browser/web_contents.h" 10 #include "content/public/browser/web_contents_observer.h" 11 #include "content/public/browser/web_contents_user_data.h" 12 13 DEFINE_WEB_CONTENTS_USER_DATA_KEY(dom_distiller::WebContentsMainFrameObserver); 14 15 namespace dom_distiller { 16 17 WebContentsMainFrameObserver::WebContentsMainFrameObserver( 18 content::WebContents* web_contents) 19 : is_document_loaded_in_main_frame_(false), is_initialized_(false) { 20 content::WebContentsObserver::Observe(web_contents); 21 } 22 23 WebContentsMainFrameObserver::~WebContentsMainFrameObserver() { 24 CleanUp(); 25 } 26 27 void WebContentsMainFrameObserver::DocumentLoadedInFrame( 28 content::RenderFrameHost* render_frame_host) { 29 if (!render_frame_host->GetParent()) { 30 is_document_loaded_in_main_frame_ = true; 31 } 32 } 33 34 void WebContentsMainFrameObserver::DidNavigateMainFrame( 35 const content::LoadCommittedDetails& details, 36 const content::FrameNavigateParams& params) { 37 if (details.is_main_frame) { 38 is_document_loaded_in_main_frame_ = false; 39 is_initialized_ = true; 40 } 41 } 42 43 void WebContentsMainFrameObserver::RenderProcessGone( 44 base::TerminationStatus status) { 45 CleanUp(); 46 } 47 48 void WebContentsMainFrameObserver::CleanUp() { 49 content::WebContentsObserver::Observe(NULL); 50 } 51 52 } // namespace dom_distiller 53