1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_API_WEB_NAVIGATION_FRAME_NAVIGATION_STATE_H_
#define CHROME_BROWSER_EXTENSIONS_API_WEB_NAVIGATION_FRAME_NAVIGATION_STATE_H_
#include "content/public/browser/document_user_data.h"
#include "url/gurl.h"
namespace content {
class RenderFrameHost;
}
namespace extensions {
// Used to track the loading state of RenderFrameHost instances in a given tab
// currently known to the webNavigation API. It is mainly used to track in which
// frames an error occurred so no further events for this frame are being sent.
// TODO(carlscab): DocumentState seems like a better name as this track per
// document state.
class FrameNavigationState
: public content::DocumentUserData<FrameNavigationState> {
public:
FrameNavigationState(const FrameNavigationState&) = delete;
FrameNavigationState& operator=(const FrameNavigationState&) = delete;
~FrameNavigationState() override;
// True if in general webNavigation events may be sent for the given URL.
static bool IsValidUrl(const GURL& url);
// True if navigation events for the this frame can be sent.
bool CanSendEvents() const;
// Starts to track a document load to |url|.
void StartTrackingDocumentLoad(const GURL& url,
bool is_same_document,
bool is_from_back_forward_cache,
bool is_error_page);
// Returns the URL corresponding to a tracked |frame_host|.
// TODO(dcheng): Why is this needed? Can't this information be extracted from
// RenderFrameHost?
GURL GetUrl() const;
// Marks this frame as in an error state, i.e. the onErrorOccurred event was
// fired for it, and no further events should be sent for it.
void SetErrorOccurredInFrame();
// True if this frame is marked as being in an error state.
bool GetErrorOccurredInFrame() const;
// Marks this frame as having finished its last document load, i.e. the
// onCompleted event was fired for this frame.
void SetDocumentLoadCompleted();
// True if this frame is currently not loading a document.
bool GetDocumentLoadCompleted() const;
// Marks this frame as having finished parsing.
void SetParsingFinished();
// True if |frame_host| has finished parsing.
bool GetParsingFinished() const;
#ifdef UNIT_TEST
static void set_allow_extension_scheme(bool allow_extension_scheme) {
allow_extension_scheme_ = allow_extension_scheme;
}
#endif
private:
friend class content::DocumentUserData<FrameNavigationState>;
DOCUMENT_USER_DATA_KEY_DECL();
explicit FrameNavigationState(content::RenderFrameHost*);
bool error_occurred_ = false; // True if an error has occurred in this frame.
bool is_loading_ = false; // True if there is a document load going on.
bool is_parsing_ = false; // True if the frame is still parsing.
GURL url_; // URL of this frame.
// If true, also allow events from chrome-extension:// URLs.
static bool allow_extension_scheme_;
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_WEB_NAVIGATION_FRAME_NAVIGATION_STATE_H_
|