Index: chrome/browser/extensions/extension_webnavigation_api.h |
diff --git a/chrome/browser/extensions/extension_webnavigation_api.h b/chrome/browser/extensions/extension_webnavigation_api.h |
index 21cfb1606a8101372b058dbea8c7d55eb3bef1d8..0e75c2ff74f609cf02b7ffd3cf9b1637ed473089 100644 |
--- a/chrome/browser/extensions/extension_webnavigation_api.h |
+++ b/chrome/browser/extensions/extension_webnavigation_api.h |
@@ -22,6 +22,51 @@ class NavigationController; |
class ProvisionalLoadDetails; |
class TabContents; |
+// Tracks which frames are in an error state, and no navigation events should |
+// be sent for. |
+class FrameNavigationState : public NotificationObserver { |
yzshen
2010/10/27 17:43:38
1) The design says: For a specific *navigation*, t
jochen (gone - plz use gerrit)
2010/10/27 18:01:14
I think it works for that case :)
I'll add a unit
|
+ public: |
+ FrameNavigationState(); |
+ ~FrameNavigationState(); |
yzshen
2010/10/27 17:43:38
Please consider to add "virtual" for the destructo
jochen (gone - plz use gerrit)
2010/10/27 18:01:14
why? It'll just make the destructor call more expe
yzshen
2010/10/27 18:52:29
Since ~NotificationObserver is declared as "virtua
|
+ |
+ // True if navigation events for the given frame can be sent. |
+ bool CanSendEvents(long long frame_id) const; |
+ |
+ // Starts the track a frame given by its |frame_id| showing the URL |url| in |
yzshen
2010/10/27 17:43:38
Do you mean "Starts to track"?
|
+ // a |tab_contents|. |
+ void TrackFrame(long long frame_id, |
+ const GURL& url, |
+ bool is_main_frame, |
+ const TabContents* tab_contents); |
+ |
+ // Marks a frame as in an error state. |
+ void ErrorOccurredInFrame(long long frame_id); |
+ |
+ private: |
+ typedef std::multimap<const TabContents*, long long> TabContentsToFrameIdMap; |
+ typedef std::map<long long, bool> FrameIdToErrorStateMap; |
+ |
+ // NotificationObserver implementation. |
+ virtual void Observe(NotificationType type, |
+ const NotificationSource& source, |
+ const NotificationDetails& details); |
+ |
+ // Remove state associated with this tab contents and all of its frames. |
yzshen
2010/10/27 17:43:38
Remove -> Removes
|
+ void RemoveTabContentsState(const TabContents* tab_contents); |
+ |
+ // Tracks which frames belong to a given tab contents object. |
+ TabContentsToFrameIdMap tab_contents_map_; |
+ |
+ // Tracks which frames are in an error state. Maps to true, if an error has |
+ // occurred in a given frame. |
+ FrameIdToErrorStateMap frame_state_map_; |
+ |
+ // Used for tracking registrations to tab contents notifications. |
+ NotificationRegistrar registrar_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FrameNavigationState); |
+}; |
+ |
// Observes navigation notifications and routes them as events to the extension |
// system. |
class ExtensionWebNavigationEventRouter : public NotificationObserver { |
@@ -65,6 +110,9 @@ class ExtensionWebNavigationEventRouter : public NotificationObserver { |
const char* event_name, |
const std::string& json_args); |
+ // Tracks the state of the frames we are sending events for. |
+ FrameNavigationState navigation_state_; |
+ |
// Used for tracking registrations to navigation notifications. |
NotificationRegistrar registrar_; |