| OLD | NEW | 
|    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 // Defines the Chrome Extensions WebNavigation API functions for observing and |    5 // Defines the Chrome Extensions WebNavigation API functions for observing and | 
|    6 // intercepting navigation events, as specified in the extension JSON API. |    6 // intercepting navigation events, as specified in the extension JSON API. | 
|    7  |    7  | 
|    8 #ifndef CHROME_BROWSER_EXTENSIONS_API_WEB_NAVIGATION_WEB_NAVIGATION_API_H_ |    8 #ifndef CHROME_BROWSER_EXTENSIONS_API_WEB_NAVIGATION_WEB_NAVIGATION_API_H_ | 
|    9 #define CHROME_BROWSER_EXTENSIONS_API_WEB_NAVIGATION_WEB_NAVIGATION_API_H_ |    9 #define CHROME_BROWSER_EXTENSIONS_API_WEB_NAVIGATION_WEB_NAVIGATION_API_H_ | 
|   10  |   10  | 
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  103  |  103  | 
|  104 // Observes navigation notifications and routes them as events to the extension |  104 // Observes navigation notifications and routes them as events to the extension | 
|  105 // system. |  105 // system. | 
|  106 class WebNavigationEventRouter : public TabStripModelObserver, |  106 class WebNavigationEventRouter : public TabStripModelObserver, | 
|  107                                  public BrowserTabStripTrackerDelegate, |  107                                  public BrowserTabStripTrackerDelegate, | 
|  108                                  public content::NotificationObserver { |  108                                  public content::NotificationObserver { | 
|  109  public: |  109  public: | 
|  110   explicit WebNavigationEventRouter(Profile* profile); |  110   explicit WebNavigationEventRouter(Profile* profile); | 
|  111   ~WebNavigationEventRouter() override; |  111   ~WebNavigationEventRouter() override; | 
|  112  |  112  | 
|  113  private: |  113   // Handler for the NOTIFICATION_RETARGETING event. The method takes the | 
 |  114   // details of such an event and stores them for the later | 
 |  115   // NOTIFICATION_TAB_ADDED event. | 
 |  116   void Retargeting(const RetargetingDetails* details); | 
 |  117  | 
|  114   // Used to cache the information about newly created WebContents objects. |  118   // Used to cache the information about newly created WebContents objects. | 
|  115   struct PendingWebContents{ |  119   struct PendingWebContents{ | 
|  116     PendingWebContents(); |  120     PendingWebContents(); | 
|  117     PendingWebContents(content::WebContents* source_web_contents, |  121     PendingWebContents(content::WebContents* source_web_contents, | 
|  118                        content::RenderFrameHost* source_frame_host, |  122                        content::RenderFrameHost* source_frame_host, | 
|  119                        content::WebContents* target_web_contents, |  123                        content::WebContents* target_web_contents, | 
|  120                        const GURL& target_url); |  124                        const GURL& target_url); | 
|  121     ~PendingWebContents(); |  125     ~PendingWebContents(); | 
|  122  |  126  | 
|  123     content::WebContents* source_web_contents; |  127     content::WebContents* source_web_contents; | 
|  124     content::RenderFrameHost* source_frame_host; |  128     content::RenderFrameHost* source_frame_host; | 
|  125     content::WebContents* target_web_contents; |  129     content::WebContents* target_web_contents; | 
|  126     GURL target_url; |  130     GURL target_url; | 
|  127   }; |  131   }; | 
|  128  |  132  | 
 |  133  private: | 
|  129   // BrowserTabStripTrackerDelegate implementation. |  134   // BrowserTabStripTrackerDelegate implementation. | 
|  130   bool ShouldTrackBrowser(Browser* browser) override; |  135   bool ShouldTrackBrowser(Browser* browser) override; | 
|  131  |  136  | 
|  132   // TabStripModelObserver implementation. |  137   // TabStripModelObserver implementation. | 
|  133   void TabReplacedAt(TabStripModel* tab_strip_model, |  138   void TabReplacedAt(TabStripModel* tab_strip_model, | 
|  134                      content::WebContents* old_contents, |  139                      content::WebContents* old_contents, | 
|  135                      content::WebContents* new_contents, |  140                      content::WebContents* new_contents, | 
|  136                      int index) override; |  141                      int index) override; | 
|  137  |  142  | 
|  138   // content::NotificationObserver implementation. |  143   // content::NotificationObserver implementation. | 
|  139   void Observe(int type, |  144   void Observe(int type, | 
|  140                const content::NotificationSource& source, |  145                const content::NotificationSource& source, | 
|  141                const content::NotificationDetails& details) override; |  146                const content::NotificationDetails& details) override; | 
|  142  |  147  | 
|  143   // Handler for the NOTIFICATION_RETARGETING event. The method takes the |  | 
|  144   // details of such an event and stores them for the later |  | 
|  145   // NOTIFICATION_TAB_ADDED event. |  | 
|  146   void Retargeting(const RetargetingDetails* details); |  | 
|  147  |  | 
|  148   // Handler for the NOTIFICATION_TAB_ADDED event. The method takes the details |  148   // Handler for the NOTIFICATION_TAB_ADDED event. The method takes the details | 
|  149   // of such an event and creates a JSON formated extension event from it. |  149   // of such an event and creates a JSON formated extension event from it. | 
|  150   void TabAdded(content::WebContents* tab); |  150   void TabAdded(content::WebContents* tab); | 
|  151  |  151  | 
|  152   // Handler for NOTIFICATION_WEB_CONTENTS_DESTROYED. If |tab| is in |  152   // Handler for NOTIFICATION_WEB_CONTENTS_DESTROYED. If |tab| is in | 
|  153   // |pending_web_contents_|, it is removed. |  153   // |pending_web_contents_|, it is removed. | 
|  154   void TabDestroyed(content::WebContents* tab); |  154   void TabDestroyed(content::WebContents* tab); | 
|  155  |  155  | 
|  156   // Mapping pointers to WebContents objects to information about how they got |  156   // Mapping pointers to WebContents objects to information about how they got | 
|  157   // created. |  157   // created. | 
|  158   std::map<content::WebContents*, PendingWebContents> pending_web_contents_; |  | 
|  159  |  158  | 
|  160   // Used for tracking registrations to navigation notifications. |  159   // Used for tracking registrations to navigation notifications. | 
|  161   content::NotificationRegistrar registrar_; |  160   content::NotificationRegistrar registrar_; | 
|  162  |  161  | 
|  163   // The profile that owns us via ExtensionService. |  162   // The profile that owns us via ExtensionService. | 
|  164   Profile* profile_; |  163   Profile* profile_; | 
|  165  |  164  | 
|  166   BrowserTabStripTracker browser_tab_strip_tracker_; |  165   BrowserTabStripTracker browser_tab_strip_tracker_; | 
|  167  |  166  | 
|  168   DISALLOW_COPY_AND_ASSIGN(WebNavigationEventRouter); |  167   DISALLOW_COPY_AND_ASSIGN(WebNavigationEventRouter); | 
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  211  |  210  | 
|  212   // Created lazily upon OnListenerAdded. |  211   // Created lazily upon OnListenerAdded. | 
|  213   std::unique_ptr<WebNavigationEventRouter> web_navigation_event_router_; |  212   std::unique_ptr<WebNavigationEventRouter> web_navigation_event_router_; | 
|  214  |  213  | 
|  215   DISALLOW_COPY_AND_ASSIGN(WebNavigationAPI); |  214   DISALLOW_COPY_AND_ASSIGN(WebNavigationAPI); | 
|  216 }; |  215 }; | 
|  217  |  216  | 
|  218 }  // namespace extensions |  217 }  // namespace extensions | 
|  219  |  218  | 
|  220 #endif  // CHROME_BROWSER_EXTENSIONS_API_WEB_NAVIGATION_WEB_NAVIGATION_API_H_ |  219 #endif  // CHROME_BROWSER_EXTENSIONS_API_WEB_NAVIGATION_WEB_NAVIGATION_API_H_ | 
| OLD | NEW |