blob: 55d509a0d8b5a48c0aefa358a51f726eeaaf5c85 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BLIMP_ENGINE_SESSION_PAGE_LOAD_TRACKER_H_
#define BLIMP_ENGINE_SESSION_PAGE_LOAD_TRACKER_H_
#include "base/cancelable_callback.h"
#include "base/macros.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/web_contents_observer.h"
namespace blimp {
namespace engine {
enum class PageLoadStatus { LOADING, LOADED };
class PageLoadTrackerClient {
public:
virtual ~PageLoadTrackerClient() {}
// Called when a navigation status update should be sent to the client.
// |load_status| indicates the status of the navigation. An update with a
// |LOADING| value is sent each time a new navigation is initiated. This
// update will be followed by a |LOADED| value when the navigation either
// successfully finishes or fails.
virtual void SendPageLoadStatusUpdate(PageLoadStatus load_status) = 0;
};
// Tracks the page load status for a tab using load and paint notifications
// from the renderer.
class PageLoadTracker : public content::WebContentsObserver {
public:
explicit PageLoadTracker(content::WebContents* web_contents,
PageLoadTrackerClient* client);
~PageLoadTracker() override;
private:
// content::WebContentsObserver implementation.
void DidStartNavigation(
content::NavigationHandle* navigation_handle) override;
void DidFinishNavigation(
content::NavigationHandle* navigation_handle) override;
// Invoked when the renderer has performed at least one paint after the
// navigation was committed.
void DidPaintAfterNavigationCommitted(bool result);
base::CancelableCallback<void(bool)> did_paint_after_navigation_callback_;
PageLoadTrackerClient* client_;
DISALLOW_COPY_AND_ASSIGN(PageLoadTracker);
};
} // namespace engine
} // namespace blimp
#endif // BLIMP_ENGINE_SESSION_PAGE_LOAD_TRACKER_H_