blob: 077796e63f03f5973637d2c1b22b99a405f9922d [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BLIMP_CLIENT_CORE_BLIMP_CONTENTS_IMPL_H_
#define BLIMP_CLIENT_CORE_BLIMP_CONTENTS_IMPL_H_
#include "base/macros.h"
#include "base/observer_list.h"
#include "base/supports_user_data.h"
#include "blimp/client/core/blimp_navigation_controller_delegate.h"
#include "blimp/client/core/blimp_navigation_controller_impl.h"
#include "blimp/client/core/public/blimp_contents.h"
#include "url/gurl.h"
#if defined(OS_ANDROID)
#include "base/android/jni_android.h"
#endif // defined(OS_ANDROID)
namespace blimp {
namespace client {
#if defined(OS_ANDROID)
class BlimpContentsImplAndroid;
#endif // defined(OS_ANDROID)
class BlimpContentsObserver;
class BlimpNavigationController;
// BlimpContentsImpl is the implementation of the core class in
// //blimp/client/core, the BlimpContents.
class BlimpContentsImpl : public BlimpContents,
public BlimpNavigationControllerDelegate,
base::SupportsUserData {
public:
BlimpContentsImpl();
~BlimpContentsImpl() override;
#if defined(OS_ANDROID)
base::android::ScopedJavaLocalRef<jobject> GetJavaBlimpContentsImpl();
BlimpContentsImplAndroid* GetBlimpContentsImplAndroid();
#endif // defined(OS_ANDROID)
// BlimpContents implementation.
BlimpNavigationControllerImpl& GetNavigationController() override;
void AddObserver(BlimpContentsObserver* observer) override;
void RemoveObserver(BlimpContentsObserver* observer) override;
// BlimpNavigationControllerDelegate implementation.
void NotifyURLLoaded(const GURL& url) override;
private:
// Handles the back/forward list and loading URLs.
BlimpNavigationControllerImpl navigation_controller_;
// A list of all the observers of this BlimpContentsImpl.
base::ObserverList<BlimpContentsObserver> observers_;
DISALLOW_COPY_AND_ASSIGN(BlimpContentsImpl);
};
} // namespace client
} // namespace blimp
#endif // BLIMP_CLIENT_CORE_BLIMP_CONTENTS_IMPL_H_