1// Copyright 2013 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 CHROME_BROWSER_PRERENDER_EXTERNAL_PRERENDER_HANDLER_ANDROID_H_
6#define CHROME_BROWSER_PRERENDER_EXTERNAL_PRERENDER_HANDLER_ANDROID_H_
7
8#include <jni.h>
9
10#include "base/android/scoped_java_ref.h"
11#include "base/memory/scoped_ptr.h"
12
13class GURL;
14class Profile;
15
16namespace content {
17class WebContents;
18}
19
20namespace prerender {
21class PrerenderHandle;
22
23// A class for handling external prerender requests from other applications.
24class ExternalPrerenderHandlerAndroid {
25 public:
26  explicit ExternalPrerenderHandlerAndroid();
27
28  // Add a prerender with the given url and referrer on the PrerenderManager of
29  // the given profile. This is restricted to a single prerender at a time.
30  bool AddPrerender(JNIEnv* env,
31                    jobject obj,
32                    jobject profile,
33                    jlong web_content_ptr,
34                    jstring url,
35                    jstring referrer,
36                    jint width,
37                    jint height);
38
39  // Cancel the prerender associated with the prerender_handle_
40  void CancelCurrentPrerender(JNIEnv* env, jobject object);
41
42  // Whether the PrerenderManager associated with the given profile has any
43  // prerenders for the url.
44  static bool HasPrerenderedUrl(Profile* profile,
45                                GURL url,
46                                content::WebContents* web_contents);
47
48  // Whether the cookie store associated with this profile has been loaded.
49  static bool HasCookieStoreLoaded(Profile* profile);
50
51  static bool RegisterExternalPrerenderHandlerAndroid(JNIEnv* env);
52
53 private:
54  virtual ~ExternalPrerenderHandlerAndroid();
55  scoped_ptr<prerender::PrerenderHandle> prerender_handle_;
56
57  DISALLOW_COPY_AND_ASSIGN(ExternalPrerenderHandlerAndroid);
58};
59
60} // namespace prerender
61
62#endif  // CHROME_BROWSER_PRERENDER_EXTERNAL_PRERENDER_HANDLER_ANDROID_H_
63