| 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 #pragma once | 10 #pragma once |
| 11 | 11 |
| 12 #include <map> | 12 #include <map> |
| 13 #include <set> | 13 #include <set> |
| 14 | 14 |
| 15 #include "base/compiler_specific.h" | 15 #include "base/compiler_specific.h" |
| 16 #include "chrome/browser/extensions/extension_function.h" | 16 #include "chrome/browser/extensions/extension_function.h" |
| 17 #include "chrome/browser/profiles/profile.h" | 17 #include "chrome/browser/profiles/profile.h" |
| 18 #include "chrome/browser/ui/browser_list.h" |
| 19 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 18 #include "content/public/browser/notification_observer.h" | 20 #include "content/public/browser/notification_observer.h" |
| 19 #include "content/public/browser/notification_registrar.h" | 21 #include "content/public/browser/notification_registrar.h" |
| 20 #include "content/public/browser/web_contents_observer.h" | 22 #include "content/public/browser/web_contents_observer.h" |
| 21 #include "googleurl/src/gurl.h" | 23 #include "googleurl/src/gurl.h" |
| 22 | 24 |
| 23 struct RetargetingDetails; | 25 struct RetargetingDetails; |
| 24 | 26 |
| 25 namespace extensions { | 27 namespace extensions { |
| 26 | 28 |
| 27 // Tracks the navigation state of all frames in a given tab currently known to | 29 // Tracks the navigation state of all frames in a given tab currently known to |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 FrameNavigationState navigation_state_; | 188 FrameNavigationState navigation_state_; |
| 187 | 189 |
| 188 // Used for tracking registrations to redirect notifications. | 190 // Used for tracking registrations to redirect notifications. |
| 189 content::NotificationRegistrar registrar_; | 191 content::NotificationRegistrar registrar_; |
| 190 | 192 |
| 191 DISALLOW_COPY_AND_ASSIGN(WebNavigationTabObserver); | 193 DISALLOW_COPY_AND_ASSIGN(WebNavigationTabObserver); |
| 192 }; | 194 }; |
| 193 | 195 |
| 194 // Observes navigation notifications and routes them as events to the extension | 196 // Observes navigation notifications and routes them as events to the extension |
| 195 // system. | 197 // system. |
| 196 class WebNavigationEventRouter : public content::NotificationObserver { | 198 class WebNavigationEventRouter : public TabStripModelObserver, |
| 199 public BrowserList::Observer, |
| 200 public content::NotificationObserver { |
| 197 public: | 201 public: |
| 198 explicit WebNavigationEventRouter(Profile* profile); | 202 explicit WebNavigationEventRouter(Profile* profile); |
| 199 virtual ~WebNavigationEventRouter(); | 203 virtual ~WebNavigationEventRouter(); |
| 200 | 204 |
| 201 // Invoked by the extensions service once the extension system is fully set | 205 // Invoked by the extensions service once the extension system is fully set |
| 202 // up and can start dispatching events to extensions. | 206 // up and can start dispatching events to extensions. |
| 203 void Init(); | 207 void Init(); |
| 204 | 208 |
| 205 private: | 209 private: |
| 206 // Used to cache the information about newly created WebContents objects. | 210 // Used to cache the information about newly created WebContents objects. |
| 207 struct PendingWebContents{ | 211 struct PendingWebContents{ |
| 208 PendingWebContents(); | 212 PendingWebContents(); |
| 209 PendingWebContents(content::WebContents* source_web_contents, | 213 PendingWebContents(content::WebContents* source_web_contents, |
| 210 int64 source_frame_id, | 214 int64 source_frame_id, |
| 211 bool source_frame_is_main_frame, | 215 bool source_frame_is_main_frame, |
| 212 content::WebContents* target_web_contents, | 216 content::WebContents* target_web_contents, |
| 213 const GURL& target_url); | 217 const GURL& target_url); |
| 214 ~PendingWebContents(); | 218 ~PendingWebContents(); |
| 215 | 219 |
| 216 content::WebContents* source_web_contents; | 220 content::WebContents* source_web_contents; |
| 217 int64 source_frame_id; | 221 int64 source_frame_id; |
| 218 bool source_frame_is_main_frame; | 222 bool source_frame_is_main_frame; |
| 219 content::WebContents* target_web_contents; | 223 content::WebContents* target_web_contents; |
| 220 GURL target_url; | 224 GURL target_url; |
| 221 }; | 225 }; |
| 222 | 226 |
| 227 // TabStripModelObserver implementation. |
| 228 virtual void TabReplacedAt(TabStripModel* tab_strip_model, |
| 229 TabContents* old_contents, |
| 230 TabContents* new_contents, |
| 231 int index) OVERRIDE; |
| 232 |
| 233 // BrowserList::Observer implementation. |
| 234 virtual void OnBrowserAdded(Browser* browser) OVERRIDE; |
| 235 virtual void OnBrowserRemoved(Browser* browser) OVERRIDE; |
| 236 |
| 223 // content::NotificationObserver implementation. | 237 // content::NotificationObserver implementation. |
| 224 virtual void Observe(int type, | 238 virtual void Observe(int type, |
| 225 const content::NotificationSource& source, | 239 const content::NotificationSource& source, |
| 226 const content::NotificationDetails& details) OVERRIDE; | 240 const content::NotificationDetails& details) OVERRIDE; |
| 227 | 241 |
| 228 // Handler for the NOTIFICATION_RETARGETING event. The method takes the | 242 // Handler for the NOTIFICATION_RETARGETING event. The method takes the |
| 229 // details of such an event and stores them for the later | 243 // details of such an event and stores them for the later |
| 230 // NOTIFICATION_TAB_ADDED event. | 244 // NOTIFICATION_TAB_ADDED event. |
| 231 void Retargeting(const RetargetingDetails* details); | 245 void Retargeting(const RetargetingDetails* details); |
| 232 | 246 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 261 // API function that returns the states of all frames in a given tab. | 275 // API function that returns the states of all frames in a given tab. |
| 262 class GetAllFramesFunction : public SyncExtensionFunction { | 276 class GetAllFramesFunction : public SyncExtensionFunction { |
| 263 virtual ~GetAllFramesFunction() {} | 277 virtual ~GetAllFramesFunction() {} |
| 264 virtual bool RunImpl() OVERRIDE; | 278 virtual bool RunImpl() OVERRIDE; |
| 265 DECLARE_EXTENSION_FUNCTION_NAME("webNavigation.getAllFrames") | 279 DECLARE_EXTENSION_FUNCTION_NAME("webNavigation.getAllFrames") |
| 266 }; | 280 }; |
| 267 | 281 |
| 268 } // namespace extensions | 282 } // namespace extensions |
| 269 | 283 |
| 270 #endif // CHROME_BROWSER_EXTENSIONS_API_WEB_NAVIGATION_WEB_NAVIGATION_API_H_ | 284 #endif // CHROME_BROWSER_EXTENSIONS_API_WEB_NAVIGATION_WEB_NAVIGATION_API_H_ |
| OLD | NEW |