blob: b8dddb14b25e13934c9de0f606c4d422daf2d78a [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ANDROID_PREFERENCES_COOKIE_CONTROLS_SERVICE_BRIDGE_H_
#define CHROME_BROWSER_ANDROID_PREFERENCES_COOKIE_CONTROLS_SERVICE_BRIDGE_H_
#include "base/android/jni_weak_ref.h"
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "chrome/browser/ui/cookie_controls/cookie_controls_service.h"
#include "components/content_settings/core/common/cookie_controls_enforcement.h"
class Profile;
// Communicates between CookieControlsService (C++ backend) and observers
// in the Incognito NTP Java UI.
class CookieControlsServiceBridge : public CookieControlsService::Observer {
public:
CookieControlsServiceBridge(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
Profile* profile);
CookieControlsServiceBridge(const CookieControlsServiceBridge&) = delete;
CookieControlsServiceBridge& operator=(const CookieControlsServiceBridge&) =
delete;
~CookieControlsServiceBridge() override;
// Destroys the CookieControlsServiceBridge object. This needs to be called on
// the java side when the object is not in use anymore.
void Destroy(JNIEnv* env);
void HandleCookieControlsToggleChanged(JNIEnv* env, jboolean checked);
void UpdateServiceIfNecessary(JNIEnv* env);
// CookieControlsService::Observer
void OnThirdPartyCookieBlockingPrefChanged() override;
void OnThirdPartyCookieBlockingPolicyChanged() override;
private:
// Updates cookie controls UI when third-party cookie blocking setting has
// changed.
void SendCookieControlsUIChanges();
// Starts a service to observe the current profile.
void UpdateServiceIfNecessary();
raw_ptr<CookieControlsService> service_;
base::android::ScopedJavaGlobalRef<jobject> jobject_;
raw_ptr<Profile> profile_;
base::ScopedObservation<CookieControlsService,
CookieControlsService::Observer>
cookie_controls_service_obs_{this};
};
#endif // CHROME_BROWSER_ANDROID_PREFERENCES_COOKIE_CONTROLS_SERVICE_BRIDGE_H_