1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// found in the LICENSE file.
4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#ifndef CHROME_BROWSER_ANDROID_FOREIGN_SESSION_HELPER_H_
6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define CHROME_BROWSER_ANDROID_FOREIGN_SESSION_HELPER_H_
7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include <jni.h>
9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/android/scoped_java_ref.h"
11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "content/public/browser/notification_registrar.h"
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)using base::android::ScopedJavaLocalRef;
16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)struct SessionWindow;
18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace browser_sync {
20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)struct SyncedSession;
21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}  // namespace browser_sync
22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class ForeignSessionHelper : public content::NotificationObserver {
24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public:
25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  explicit ForeignSessionHelper(Profile* profile);
26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void Destroy(JNIEnv* env, jobject obj);
27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  jboolean IsTabSyncEnabled(JNIEnv* env, jobject obj);
28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void SetOnForeignSessionCallback(JNIEnv* env, jobject obj, jobject callback);
29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  jboolean GetForeignSessions(JNIEnv* env, jobject obj, jobject result);
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  jboolean OpenForeignSessionTab(JNIEnv* env,
31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                 jobject obj,
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                 jobject j_tab,
33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                 jstring session_tag,
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                 jint tab_id,
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                 jint disposition);
36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void DeleteForeignSession(JNIEnv* env, jobject obj, jstring session_tag);
37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // NotificationObserver implemenation
39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  virtual void Observe(int type,
40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                       const content::NotificationSource& source,
41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  static bool RegisterForeignSessionHelper(JNIEnv* env);
44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private:
46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  virtual ~ForeignSessionHelper();
47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  Profile* profile_;  // weak
49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  base::android::ScopedJavaGlobalRef<jobject> callback_;
50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  content::NotificationRegistrar registrar_;
51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ForeignSessionHelper);
53a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
54a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif  // CHROME_BROWSER_ANDROID_FOREIGN_SESSION_HELPER_H_
56