[NextBrowser] MultiView Initial implementation 31/325031/4
authorTarun Verma <tarun1.verma@samsung.com>
Fri, 30 May 2025 11:08:49 +0000 (16:38 +0530)
committerBot Blink <blinkbot@samsung.com>
Thu, 5 Jun 2025 14:40:24 +0000 (14:40 +0000)
Change-Id: I6a18c17bd2deb393610b19379320113d67e09735
Signed-off-by: Tarun Verma <tarun1.verma@samsung.com>
14 files changed:
chrome/browser/ui/BUILD.gn
chrome/browser/ui/samsung/multiscreen_controller.cc [new file with mode: 0644]
chrome/browser/ui/samsung/multiscreen_controller.h [new file with mode: 0644]
chrome/browser/ui/samsung/samsung_browser_core.cc
chrome/browser/ui/samsung/samsung_browser_core.h
chrome/browser/ui/samsung/window_event_manager.cc [new file with mode: 0644]
chrome/browser/ui/samsung/window_event_manager.h [new file with mode: 0644]
components/samsung/public/window_event_provider/window_event_provider.cc [new file with mode: 0644]
components/samsung/public/window_event_provider/window_event_provider.h [new file with mode: 0644]
components/samsung/window_event_provider/BUILD.gn [new file with mode: 0644]
components/samsung/window_event_provider/window_event_provider_impl.cc [new file with mode: 0644]
components/samsung/window_event_provider/window_event_provider_impl.h [new file with mode: 0644]
tizen_src/chromium_impl/ui/ozone/platform/efl/efl_window.cc
tizen_src/chromium_impl/ui/ozone/platform/efl/efl_window.h

index 622326d16c170b9b7ec3af6dd52860c6b223dab0..10ab56a52bad27b3e0e2418d01e5b2544abd8b44 100644 (file)
@@ -736,6 +736,7 @@ static_library("ui") {
       "//components/samsung/bpbookmark_model",
       "//components/samsung/bpbookmark_image_model",
       "//components/samsung/browser_config",
+      "//components/samsung/window_event_provider",
     ]
 
     configs += [
@@ -6078,6 +6079,10 @@ static_library("ui") {
         "samsung/multi_language_controller.h",
         "samsung/thread_booster_controller.cc",
         "samsung/thread_booster_controller.h",
+        "samsung/multiscreen_controller.cc",
+        "samsung/multiscreen_controller.h",
+        "samsung/window_event_manager.cc",
+        "samsung/window_event_manager.h",
       ]
       deps += [
         "//chrome/app:samsung_strings",
diff --git a/chrome/browser/ui/samsung/multiscreen_controller.cc b/chrome/browser/ui/samsung/multiscreen_controller.cc
new file mode 100644 (file)
index 0000000..15d8419
--- /dev/null
@@ -0,0 +1,93 @@
+#include "chrome/browser/ui/samsung/multiscreen_controller.h"
+
+#include "base/logging.h"
+#include "chrome/browser/ui/samsung/samsung_browser_core.h"
+
+namespace samsung_browser_controller {
+
+MultiScreenController::MultiScreenController()
+{
+  LOG(INFO) << "Constructor start";
+}
+
+MultiScreenController::~MultiScreenController() {
+  LOG(INFO) << "Destructor start";
+  DeInit();
+}
+
+bool MultiScreenController::Init() {
+  LOG(INFO) <<"MultiScreenController::Init()";
+  auto bc = samsung_browser_main::SamsungBrowserCore::instance();
+  auto window_event_manager = bc->WindowEventManager();
+  window_event_manager->AddObserver(this);
+
+  auto system_configuration = bc->SystemConfiguration();
+  system_configuration->AddMlsModeChangedObserver(this);
+  return true;
+}
+
+void MultiScreenController::DeInit() {
+  LOG(INFO) << "MultiScreenController::DeInit()";
+  auto bc = samsung_browser_main::SamsungBrowserCore::instance();
+  auto window_event_manager = bc->WindowEventManager();
+  window_event_manager->RemoveObserver(this);
+
+  auto system_configuration = bc->SystemConfiguration();
+  system_configuration->RemoveMlsModeChangedObserver(this);
+}
+
+void MultiScreenController::EnterMultiScreen(){
+  LOG(INFO)<<"Entering multiscreen";
+  auto bc = samsung_browser_main::SamsungBrowserCore::instance();
+  auto window_event_manager = bc->WindowEventManager();
+  window_event_manager->EnterMultiScreen();
+}
+
+void MultiScreenController::ExitMultiScreen(){
+  LOG(INFO)<<"Exiting Multiscreen";
+  auto bc = samsung_browser_main::SamsungBrowserCore::instance();
+  auto window_event_manager = bc->WindowEventManager();
+  window_event_manager->ExitMultiScreen();
+}
+
+void MultiScreenController::CheckMlsState(){
+  auto bc = samsung_browser_main::SamsungBrowserCore::instance();
+  auto system_configuration = bc->SystemConfiguration();
+  int mls_state = system_configuration->GetInt(samsung_browser_fw_core::SamsungConfigKey::MLSState);
+  is_multi_screen_on_ = (mls_state == 1);
+}
+
+void MultiScreenController::RelayoutBrowserOnMultiScreenExit(){
+  auto bc = samsung_browser_main::SamsungBrowserCore::instance();
+  auto system_configuration = bc->SystemConfiguration();
+  int orientation_state = system_configuration->GetInt(samsung_browser_fw_core::SamsungConfigKey::Orientation);
+
+  if(orientation_state == 1){ //Landscape mode
+    auto browser = samsung_browser_main::SamsungBrowserCore::instance()->GetBrowserInstance();
+    browser->window()->SetBounds(gfx::Rect(0,0,1920,1080));
+  }
+  else{
+    //Portrait mode
+    //Need to implement
+  }
+}
+
+void MultiScreenController::onVirtualScreenGeometryChanged(int w, int h){
+  CheckMlsState();
+  LOG(INFO)<<"w: "<<w<<" h: "<<h<<" multiscreenState: "<<is_multi_screen_on_;
+  if(is_multi_screen_on_){
+    EnterMultiScreen();
+    auto browser = samsung_browser_main::SamsungBrowserCore::instance()->GetBrowserInstance();
+    browser->window()->SetBounds(gfx::Rect(0,0,w,h));
+  }
+}
+
+void MultiScreenController::MlsModeChanged(int mls_state){
+  is_multi_screen_on_ = (mls_state == 1);
+  if(!is_multi_screen_on_){
+    ExitMultiScreen();
+    RelayoutBrowserOnMultiScreenExit();
+  }
+}
+
+}  // namespace samsung_browser_controller
diff --git a/chrome/browser/ui/samsung/multiscreen_controller.h b/chrome/browser/ui/samsung/multiscreen_controller.h
new file mode 100644 (file)
index 0000000..ebfdfd3
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef CHROME_BROWSER_UI_SAMSUNG_MULTISCREEN_CONTROLLER_H_
+#define CHROME_BROWSER_UI_SAMSUNG_MULTISCREEN_CONTROLLER_H_
+
+#include "chrome/browser/ui/samsung/window_event_manager.h"
+#include "components/samsung/public/system_configuration/samsung_system_configuration.h"
+#include "components/samsung/public/system_configuration/samsung_system_configuration_observer.h"
+
+namespace samsung_browser_controller {
+
+class MultiScreenController:
+  public samsung_window_event_manager::WindowEventManager::Observer,
+  public samsung_browser_configuration::MlsModeChangedObserver {
+ public:
+  explicit MultiScreenController();
+  ~MultiScreenController();
+
+  MultiScreenController(const MultiScreenController&) = delete;
+  MultiScreenController& operator=(const MultiScreenController&) = delete;
+
+  bool Init();
+  void DeInit();
+  void EnterMultiScreen();
+  void ExitMultiScreen();
+  void onVirtualScreenGeometryChanged(int w, int h) override;
+  void MlsModeChanged(int value) override;
+ private:
+  void CheckMlsState();
+  void RelayoutBrowserOnMultiScreenExit();
+  bool is_multi_screen_on_;
+};
+}  // namespace samsung_browser_controller
+
+#endif  // CHROME_BROWSER_UI_SAMSUNG_MULTISCREEN_CONTROLLER_H_
index 90527e15884cd2f72a77cab0844bcd697bd23da1..1ea1ebcc3692d727f11c321e50afe3bf2f0f900d 100644 (file)
@@ -9,6 +9,8 @@
 #include "chrome/browser/ui/samsung/data_sync_manager.h"
 #include "chrome/browser/ui/samsung/samsung_account_manager.h"
 #include "chrome/browser/ui/samsung/thread_booster_controller.h"
+#include "chrome/browser/ui/samsung/multiscreen_controller.h"
+#include "chrome/browser/ui/samsung/window_event_manager.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/frame/toolbar_button_provider.h"
 #include "chrome/browser/ui/views/profiles/avatar_toolbar_button.h"
@@ -84,6 +86,8 @@ bool SamsungBrowserCore::Init() {
   SetWindowInstance();
   m_thread_booster_controller =
       std::make_unique<samsung_browser_controller::ThreadBoosterController>();
+  m_window_event_manager = std::make_unique<samsung_window_event_manager::WindowEventManager>();
+  m_window_event_manager->Init();
   m_thread_booster_controller->Init();
   m_input_manager = std::make_unique<samsung_input_manager::InputManager>();
   m_input_manager->Init();
@@ -162,7 +166,8 @@ bool SamsungBrowserCore::Init() {
       std::make_unique<samsung_browser_controller::MultiLanguageController>(
           browser_);
   m_multi_language_controller->Init();
-
+  m_multiscreen_controller = std::make_unique<samsung_browser_controller::MultiScreenController>();
+  m_multiscreen_controller->Init();
   BrowserList::AddObserver(this);
   m_initialized = true;
   return true;
index d080b62e2d4274ce4ee0e7b18bc805c5abd3fa2d..7417247f151e4061f7099dc8c55cf88ae9b12642 100644 (file)
@@ -28,6 +28,7 @@ class DataSyncController;
 class SamsungWebContentsController;
 class MCFController;
 class ThreadBoosterController;
+class MultiScreenController;
 }
 
 namespace samsung_data_sync_manager {
@@ -42,6 +43,10 @@ namespace content {
 class WebContents;
 }
 
+namespace samsung_window_event_manager {
+class WindowEventManager;
+}
+
 namespace samsung_browser_main {
 
 class SamsungBrowserCore : public BrowserListObserver {
@@ -80,7 +85,9 @@ class SamsungBrowserCore : public BrowserListObserver {
   samsung_input_manager::InputManager* InputManager() {
     return m_input_manager.get();
   };
-
+  samsung_window_event_manager::WindowEventManager* WindowEventManager() {
+    return m_window_event_manager.get();
+  }
   samsung_browser_controller::CursorController* CursorController() {
     return m_cursor_controller.get();
   };
@@ -213,6 +220,8 @@ class SamsungBrowserCore : public BrowserListObserver {
   std::unique_ptr<SamsungPass> m_samsung_pass;
   std::unique_ptr<samsung_browser_controller::ThreadBoosterController>
       m_thread_booster_controller;
+  std::unique_ptr<samsung_window_event_manager::WindowEventManager> m_window_event_manager;
+  std::unique_ptr<samsung_browser_controller::MultiScreenController> m_multiscreen_controller;
   raw_ptr<Browser> browser_;
   aura::WindowTreeHost* window_host;
   bool m_initialized;
diff --git a/chrome/browser/ui/samsung/window_event_manager.cc b/chrome/browser/ui/samsung/window_event_manager.cc
new file mode 100644 (file)
index 0000000..bca8436
--- /dev/null
@@ -0,0 +1,60 @@
+// Use of this source code is governed by a BSD-style license that can be
+// Copyright 2023 Samsung Electronics. All rights reserved.
+// found in the LICENSE file.
+#include "chrome/browser/ui/samsung/window_event_manager.h"
+
+#include "base/logging.h"
+#include "chrome/browser/ui/samsung/samsung_browser_core.h"
+
+namespace samsung_window_event_manager {
+
+WindowEventManager::WindowEventManager()
+{
+  LOG(INFO) << "Constructor start";
+}
+
+WindowEventManager::~WindowEventManager() {
+  LOG(INFO) << "Destructor start";
+  DeInit();
+}
+
+bool WindowEventManager::Init() {
+  window_event_provider_ = std::make_unique<samsung_browser_main::WindowEventProvider>();
+  auto window_host = samsung_browser_main::SamsungBrowserCore::instance()->GetWindowInstance();
+  window_event_provider_->SetWindow(window_host);
+  window_event_provider_->Init();
+  window_event_provider_->AddObserver(this);
+  LOG(INFO) <<"WindowEventManager::Init()";
+  return true;
+}
+
+void WindowEventManager::DeInit() {
+  LOG(INFO) << "WindowEventManager::DeInit()";
+  window_event_provider_->RemoveObserver(this);
+}
+
+void WindowEventManager::AddObserver(Observer* observer) {
+  LOG(INFO) << "Adding observer";
+  m_observer_list.AddObserver(observer);
+}
+
+void WindowEventManager::RemoveObserver(Observer* observer) {
+  m_observer_list.RemoveObserver(observer);
+}
+
+void WindowEventManager::EnterMultiScreen(){
+  window_event_provider_->EnterMultiScreen();
+}
+
+void WindowEventManager::ExitMultiScreen(){
+  window_event_provider_->ExitMultiScreen();
+}
+
+void WindowEventManager::onVirtualScreenGeometryChanged(int w, int h){
+  LOG(INFO)<<"virtual screen geometry change : "<<w<<" "<<h;
+  for (auto& observer : m_observer_list) {
+    observer.onVirtualScreenGeometryChanged(w, h);
+  }
+}
+
+}  // namespace samsung_browser_controller
diff --git a/chrome/browser/ui/samsung/window_event_manager.h b/chrome/browser/ui/samsung/window_event_manager.h
new file mode 100644 (file)
index 0000000..bf4d93c
--- /dev/null
@@ -0,0 +1,35 @@
+#ifndef CHROME_BROWSER_UI_SAMSUNG_WINDOW_EVENT_MANAGER_H_
+#define CHROME_BROWSER_UI_SAMSUNG_WINDOW_EVENT_MANAGER_H_
+
+#include "components/samsung/public/window_event_provider/window_event_provider.h"
+#include <memory>
+
+namespace samsung_window_event_manager {
+
+class WindowEventManager : public samsung_browser_main::WindowEventProvider::Observer {
+ public:
+  explicit WindowEventManager();
+  ~WindowEventManager();
+  WindowEventManager(const WindowEventManager&) = delete;
+  WindowEventManager& operator=(const WindowEventManager&) = delete;
+
+  class Observer {
+   public:
+    virtual ~Observer() = default;
+    virtual void onVirtualScreenGeometryChanged(int w, int h) {}
+  };
+
+  bool Init();
+  void DeInit();
+  void AddObserver(Observer* observer);
+  void RemoveObserver(Observer* observer);
+  void ExitMultiScreen();
+  void EnterMultiScreen();
+  void onVirtualScreenGeometryChanged(int w, int h) override;
+ private:
+  std::unique_ptr<samsung_browser_main::WindowEventProvider> window_event_provider_;
+  base::ObserverList<Observer>::Unchecked m_observer_list;
+};
+}  // namespace samsung_browser_controller
+
+#endif  // CHROME_BROWSER_UI_SAMSUNG_MULTISCREEN_CONTROLLER_H_
diff --git a/components/samsung/public/window_event_provider/window_event_provider.cc b/components/samsung/public/window_event_provider/window_event_provider.cc
new file mode 100644 (file)
index 0000000..62c7727
--- /dev/null
@@ -0,0 +1,58 @@
+#include "components/samsung/public/window_event_provider/window_event_provider.h"
+
+#include "base/logging.h"
+#include "components/samsung/window_event_provider/window_event_provider_impl.h"
+
+namespace samsung_browser_main {
+
+WindowEventProvider::WindowEventProvider() {}
+
+WindowEventProvider::~WindowEventProvider() {
+  Deinit();
+}
+
+void WindowEventProvider::Init() {
+  LOG(INFO) << "init called!!";
+  window_event_provider_impl_ = std::make_unique<WindowEventProviderImpl>(this);
+  window_event_provider_impl_->SetWindow(window_host_);
+  window_event_provider_impl_->Init();
+}
+
+void WindowEventProvider::Deinit() {}
+
+bool WindowEventProvider::ReInit() {
+  LOG(INFO) << "";
+  window_event_provider_impl_->DeInit();
+  window_event_provider_impl_->Init();
+  return true;
+}
+
+void WindowEventProvider::SetWindow(aura::WindowTreeHost* window_host) {
+  LOG(INFO) << "";
+  window_host_ = window_host;
+}
+
+void WindowEventProvider::AddObserver(Observer* observer) {
+  LOG(INFO) << "Adding observer";
+  m_observer_list.AddObserver(observer);
+}
+
+void WindowEventProvider::RemoveObserver(Observer* observer) {
+  m_observer_list.RemoveObserver(observer);
+}
+
+void WindowEventProvider::EnterMultiScreen(){
+  window_event_provider_impl_->EnterMultiScreen();
+}
+
+void WindowEventProvider::ExitMultiScreen(){
+  window_event_provider_impl_->ExitMultiScreen();
+}
+
+void WindowEventProvider::onVirtualScreenGeometryChanged(int w, int h){
+  for (auto& observer : m_observer_list) {
+    observer.onVirtualScreenGeometryChanged(w, h);
+  }
+}
+
+}  // namespace samsung_browser_main
diff --git a/components/samsung/public/window_event_provider/window_event_provider.h b/components/samsung/public/window_event_provider/window_event_provider.h
new file mode 100644 (file)
index 0000000..117e059
--- /dev/null
@@ -0,0 +1,40 @@
+#ifndef COMPONENTS_SAMSUNG_PUBLIC_WINDOW_EVENT_PROVIDER_WINDOW_EVENT_PROVIDER_H_
+#define COMPONENTS_SAMSUNG_PUBLIC_WINDOW_EVENT_PROVIDER_WINDOW_EVENT_PROVIDER_H_
+
+#include <memory>
+#include "ui/aura/window_tree_host_platform.h"
+
+namespace samsung_browser_main {
+
+class WindowEventProviderImpl;
+
+class WindowEventProvider {
+ public:
+  explicit WindowEventProvider();
+  ~WindowEventProvider();
+
+  WindowEventProvider(const WindowEventProvider&) = delete;
+  WindowEventProvider& operator=(const WindowEventProvider&) = delete;
+  void Init();
+  void Deinit();
+  bool ReInit();
+
+  class Observer {
+   public:
+    virtual ~Observer() = default;
+    virtual void onVirtualScreenGeometryChanged(int w, int h) {}
+  };
+
+  void AddObserver(Observer* observer);
+  void RemoveObserver(Observer* observer);
+  void SetWindow(aura::WindowTreeHost* window_host);
+  void onVirtualScreenGeometryChanged(int w, int h);
+  void EnterMultiScreen();
+  void ExitMultiScreen();
+private:
+  aura::WindowTreeHost* window_host_;
+  base::ObserverList<Observer>::Unchecked m_observer_list;
+  std::unique_ptr<WindowEventProviderImpl> window_event_provider_impl_;
+};
+}  // namespace samsung_browser_main
+#endif  // COMPONENTS_SAMSUNG_WINDOW_EVENT_PROVIDER_H
diff --git a/components/samsung/window_event_provider/BUILD.gn b/components/samsung/window_event_provider/BUILD.gn
new file mode 100644 (file)
index 0000000..c474152
--- /dev/null
@@ -0,0 +1,28 @@
+
+source_set("window_event_provider") {
+  sources = [
+    "../public/window_event_provider/window_event_provider.cc",
+    "../public/window_event_provider/window_event_provider.h",
+    "window_event_provider_impl.cc",
+    "window_event_provider_impl.h",
+  ]
+
+  public_deps = [ "//base" ]
+
+  deps = [
+    "//skia",
+    "//ui/aura",
+  ]
+
+  configs += [
+   "//tizen_src/build:ecore",
+   "//tizen_src/build:libecore",
+   "//tizen_src/build:ecore-evas",
+   "//tizen_src/build:libecore-evas",
+   "//tizen_src/build:elementary",
+   "//tizen_src/build:libelementary",
+   "//tizen_src/build:capi-window-tv",
+   "//tizen_src/build:libcapi-window-tv",
+  ]
+
+}
diff --git a/components/samsung/window_event_provider/window_event_provider_impl.cc b/components/samsung/window_event_provider/window_event_provider_impl.cc
new file mode 100644 (file)
index 0000000..40d72f7
--- /dev/null
@@ -0,0 +1,104 @@
+#include "components/samsung/window_event_provider/window_event_provider_impl.h"
+
+#include "base/logging.h"
+#include "components/samsung/public/window_event_provider/window_event_provider.h"
+#include "tizen_src/chromium_impl/ui/ozone/platform/efl/efl_window.h"
+
+constexpr int invalidMultiViewSize = 32;
+
+namespace samsung_browser_main {
+
+WindowEventProviderImpl::WindowEventProviderImpl(WindowEventProvider* window_event_provider)
+  : window_event_provider_(window_event_provider) {}
+
+
+WindowEventProviderImpl::~WindowEventProviderImpl() {
+  DeInit();
+}
+
+void WindowEventProviderImpl::Init() {
+  LOG(INFO) << "init called!!";
+}
+
+void WindowEventProviderImpl::DeInit() {
+  LOG(INFO) << "destructor is called";
+}
+
+void WindowEventProviderImpl::SetWindow(aura::WindowTreeHost* window_host) {
+  LOG(INFO) << "";
+  window_host_ = window_host;
+  ui::EflWindow* window = static_cast<ui::EflWindow*>(
+      static_cast<aura::WindowTreeHostPlatform*>(window_host)
+          ->platform_window());
+  LOG(INFO) << "Got EFL Window";
+  if(window){
+    window->RegisterVirtualScreenGeometryChangeCallback((void *)onVirtualScreenGeometryChanged, (void *)this);
+    window->SetAuxHint("wm.policy.win.user.geometry", "1");
+  }
+}
+
+void WindowEventProviderImpl::ExitMultiScreen(){
+  LOG(INFO)<<"Exiting multiscreen";
+  ui::EflWindow* window = static_cast<ui::EflWindow*>(static_cast<aura::WindowTreeHostPlatform*>(window_host_)->platform_window());
+  if(window){
+    window->SetAuxHint("wm.policy.win.transform.mode", "manual");
+  }
+}
+
+void WindowEventProviderImpl::EnterMultiScreen(){
+  LOG(INFO)<<"Entering multiscreen";
+  ui::EflWindow* window = static_cast<ui::EflWindow*>(static_cast<aura::WindowTreeHostPlatform*>(window_host_)->platform_window());
+  if(window){
+    window->SetAuxHint("wm.policy.win.transform.mode", "ratiofit");
+  }
+}
+
+void WindowEventProviderImpl::onVirtualScreenGeometryChanged(int vs_id, int x, int y, int width, int height, int angle, void* data){
+  LOG(INFO)<<" x:  "<<x<<" y: "<<y<<" width: "<<width<<" height: "<<height<<" angle: "<<angle;
+  LOG(INFO)<<"vs_id: "<<vs_id;
+  if (vs_id == 0 || vs_id == -1)
+  {
+    LOG(INFO)<<"Invalid VirtualID";
+    return;
+  }
+
+  if(width<= invalidMultiViewSize || height<= invalidMultiViewSize)
+  {
+    LOG(INFO)<<"Do not Resize : width or height is less than 33";
+    return;
+  }
+  WindowEventProviderImpl* self = static_cast<WindowEventProviderImpl*>(data);
+  if(!self){
+    LOG(INFO)<<"cast to seld failed";
+    return;
+  }
+  int aspectRatio=((float)width/(float)height)*10;
+  int w = 0, h = 0;
+  if(aspectRatio==17)
+  {
+    LOG(INFO)<<"Resizing to 1920*1080 and not setting webview's rotation";
+    w = 1920;
+    h = 1080;
+  }
+  else if(aspectRatio==5)
+  {
+    LOG(INFO)<<"Resizing to 1080*1920 and not setting webview's rotation";
+    w = 1080;
+    h = 1920;
+  }
+  else
+  {
+    w = 1920;
+    h = 1080;
+    if(width<=height)
+    {
+      w=1080;
+    }
+    h=((((float)height/(float)width)*1000)*w)/1000;
+    LOG(INFO)<<"[Not in Fixed Aspect ";
+  }
+  LOG(INFO)<<"w: "<<w<<" h: "<<h;
+  self->window_event_provider_->onVirtualScreenGeometryChanged(w,h);
+}
+
+}  // namespace samsung_browser_main
diff --git a/components/samsung/window_event_provider/window_event_provider_impl.h b/components/samsung/window_event_provider/window_event_provider_impl.h
new file mode 100644 (file)
index 0000000..381172f
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef COMPONENTS_SAMSUNG_WINDOW_EVENT_PROVIDER_WINDOW_EVENT_PROVIDER_IMPL_H_
+#define COMPONENTS_SAMSUNG_WINDOW_EVENT_PROVIDER_WINDOW_EVENT_PROVIDER_IMPL_H_
+
+//#include <memory>
+#include "ui/aura/window_tree_host_platform.h"
+
+namespace samsung_browser_main {
+
+class WindowEventProvider;
+
+class WindowEventProviderImpl {
+ public:
+  explicit WindowEventProviderImpl(WindowEventProvider*);
+  ~WindowEventProviderImpl();
+
+  WindowEventProviderImpl(const WindowEventProvider&) = delete;
+  WindowEventProviderImpl& operator=(const WindowEventProvider&) = delete;
+  void Init();
+  void DeInit();
+  void SetWindow(aura::WindowTreeHost* window_host);
+  void EnterMultiScreen();
+  void ExitMultiScreen();
+  static void onVirtualScreenGeometryChanged(int vs_id,int x, int y, int width, int height, int angle, void* data);
+ private:
+  std::unique_ptr<WindowEventProvider> window_event_provider_;
+  aura::WindowTreeHost* window_host_;
+};
+}  // namespace samsung_browser_main
+#endif  // COMPONENTS_SAMSUNG_WINDOW_EVENT_PROVIDER_WINDOW_EVENT_PROVIDER_IMPL_H_
index 4af1c9cd119d69c14c0ae8990ba854792fdd94e6..7dccb921f998d196bc7ab0a0b42628dce273ebd5 100644 (file)
 #include "tizen_src/chromium_impl/ui/ozone/platform/efl/video_controller.h"
 #endif
 
+#if defined(SAMSUNG_NEXT_BROWSER)
+#include <capi_window_tv_window_manager.h>
+#endif
+
 namespace ui {
 
 namespace {
@@ -401,6 +405,16 @@ void EflWindow::OnWindowLostCapture() {
   delegate_->OnLostCapture();
 }
 
+#if defined(SAMSUNG_NEXT_BROWSER)
+void EflWindow::RegisterVirtualScreenGeometryChangeCallback(void* callback, void* data){
+  capi_window_tv_set_virtualscreen_geometry_changed_callback(elm_win_, (capi_window_tv_virtualscreen_geometry_change_callback)callback, data);
+}
+
+void EflWindow::SetAuxHint(std::string hint, std::string value){
+  elm_win_aux_hint_add(elm_win_, hint.c_str(), value.c_str());
+}
+#endif
+
 uint32_t EflWindow::DispatchEventToDelegate(const PlatformEvent& event) {
   bool handled = DispatchEventFromNativeUiEvent(
       event, base::BindOnce(&PlatformWindowDelegate::DispatchEvent,
index 01c23d02ef6f2e22a8d0a855cb4dcb0a815838d3..8eaa0421e47376ef0006eba30bf7cd3bd59a0fcf 100644 (file)
@@ -81,7 +81,10 @@ class EflWindow : public PlatformWindow, public PlatformEventDispatcher {
   void SetFocus(bool focused) { has_focus_ = focused; }
 
   void OnWindowLostCapture();
-
+#if defined(SAMSUNG_NEXT_BROWSER)
+  void RegisterVirtualScreenGeometryChangeCallback(void* callback, void* data);
+  void SetAuxHint(std::string hint, std::string value);
+#endif
   static void OnEcoreEvasResize(Ecore_Evas* ee);
 
   Evas* evas() const { return evas_; }