embedder_(nullptr),
type_(REMOTE),
request_id_(0),
- background_throttling_(true) {
+ background_throttling_(true),
+ is_loading_main_frame_(false) {
AttachAsUserData(web_contents);
web_contents->SetUserAgentOverride(GetBrowserContext()->GetUserAgent());
}
const mate::Dictionary& options)
: embedder_(nullptr),
request_id_(0),
- background_throttling_(true) {
+ background_throttling_(true),
+ is_loading_main_frame_(false) {
// Read options.
options.Get("backgroundThrottling", &background_throttling_);
void WebContents::DidFinishLoad(content::RenderFrameHost* render_frame_host,
const GURL& validated_url) {
bool is_main_frame = !render_frame_host->GetParent();
+ if (is_main_frame)
+ is_loading_main_frame_ = false;
+
Emit("did-frame-finish-load", is_main_frame);
if (is_main_frame)
Emit("did-finish-load");
}
+void WebContents::DidStartProvisionalLoadForFrame(
+ content::RenderFrameHost* render_frame_host,
+ const GURL& url,
+ bool is_error_page,
+ bool is_iframe_srcdoc) {
+ if (!render_frame_host->GetParent())
+ is_loading_main_frame_ = true;
+}
+
+void WebContents::DidCommitProvisionalLoadForFrame(
+ content::RenderFrameHost* render_frame_host,
+ const GURL& url,
+ ui::PageTransition transition_type) {
+ if (!render_frame_host->GetParent())
+ is_loading_main_frame_ = true;
+}
+
void WebContents::DidFailProvisionalLoad(
content::RenderFrameHost* render_frame_host,
const GURL& url,
const base::string16& description,
bool was_ignored_by_handler) {
bool is_main_frame = !render_frame_host->GetParent();
+ if (is_main_frame)
+ is_loading_main_frame_ = false;
Emit("did-fail-provisional-load", code, description, url, is_main_frame);
Emit("did-fail-load", code, description, url, is_main_frame);
}
bool WebContents::IsLoading() const {
return web_contents()->IsLoading();
}
+
+bool WebContents::IsLoadingMainFrame() const {
+ return is_loading_main_frame_;
+}
bool WebContents::IsWaitingForResponse() const {
return web_contents()->IsWaitingForResponse();
.SetMethod("_getURL", &WebContents::GetURL)
.SetMethod("getTitle", &WebContents::GetTitle)
.SetMethod("isLoading", &WebContents::IsLoading)
+ .SetMethod("isLoadingMainFrame", &WebContents::IsLoadingMainFrame)
.SetMethod("isWaitingForResponse", &WebContents::IsWaitingForResponse)
.SetMethod("_stop", &WebContents::Stop)
.SetMethod("_goBack", &WebContents::GoBack)
GURL GetURL() const;
base::string16 GetTitle() const;
bool IsLoading() const;
+ bool IsLoadingMainFrame() const;
bool IsWaitingForResponse() const;
void Stop();
void ReloadIgnoringCache();
int error_code,
const base::string16& error_description,
bool was_ignored_by_handler) override;
+ void DidStartProvisionalLoadForFrame(content::RenderFrameHost* render_frame_host,
+ const GURL& validated_url,
+ bool is_error_page,
+ bool is_iframe_srcdoc) override;
+ void DidCommitProvisionalLoadForFrame(content::RenderFrameHost* render_frame_host,
+ const GURL& url,
+ ui::PageTransition transition_type) override;
void DidStartLoading() override;
void DidStopLoading() override;
void DidGetResourceResponseStart(
// Whether background throttling is disabled.
bool background_throttling_;
+ // Whether the main frame (not just a sub-frame) is currently loading.
+ bool is_loading_main_frame_;
+
DISALLOW_COPY_AND_ASSIGN(WebContents);
};