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 3 // found in the LICENSE file. 4 5 #ifndef COMPONENTS_NAVIGATION_INTERCEPTION_INTERCEPT_NAVIGATION_DELEGATE_H_ 6 #define COMPONENTS_NAVIGATION_INTERCEPTION_INTERCEPT_NAVIGATION_DELEGATE_H_ 7 8 #include "base/android/jni_weak_ref.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "base/supports_user_data.h" 11 12 class GURL; 13 14 namespace content { 15 class ResourceThrottle; 16 class WebContents; 17 } 18 19 namespace net { 20 class URLRequest; 21 } 22 23 namespace navigation_interception { 24 25 class NavigationParams; 26 27 // Native side of the InterceptNavigationDelegate Java interface. 28 // This is used to create a InterceptNavigationResourceThrottle that calls the 29 // Java interface method to determine whether a navigation should be ignored or 30 // not. 31 // To us this class: 32 // 1) the Java-side interface implementation must be associated (via the 33 // Associate method) with a WebContents for which URLRequests are to be 34 // intercepted, 35 // 2) the ResourceThrottle obtained via CreateThrottleFor must be associated 36 // with the URLRequests in the ResourceDispatcherHostDelegate 37 // implementation. 38 class InterceptNavigationDelegate : public base::SupportsUserData::Data { 39 public: 40 InterceptNavigationDelegate(JNIEnv* env, jobject jdelegate); 41 virtual ~InterceptNavigationDelegate(); 42 43 // Associates the InterceptNavigationDelegate with a WebContents using the 44 // SupportsUserData mechanism. 45 // As implied by the use of scoped_ptr, the WebContents will assume ownership 46 // of |delegate|. 47 static void Associate(content::WebContents* web_contents, 48 scoped_ptr<InterceptNavigationDelegate> delegate); 49 // Gets the InterceptNavigationDelegate associated with the WebContents, 50 // can be null. 51 static InterceptNavigationDelegate* Get(content::WebContents* web_contents); 52 53 // Creates a InterceptNavigationResourceThrottle that will direct all 54 // callbacks to the InterceptNavigationDelegate. 55 static content::ResourceThrottle* CreateThrottleFor( 56 net::URLRequest* request); 57 58 virtual bool ShouldIgnoreNavigation( 59 const NavigationParams& navigation_params); 60 private: 61 JavaObjectWeakGlobalRef weak_jdelegate_; 62 }; 63 64 bool RegisterInterceptNavigationDelegate(JNIEnv* env); 65 66 } // namespace navigation_interception 67 68 #endif // COMPONENTS_NAVIGATION_INTERCEPTION_INTERCEPT_NAVIGATION_DELEGATE_H_ 69