[NextBrowser] Add initial version of Open Tabs Upsync Feature 75/317775/10
authorMarc Dominic San Pedro <m.sanpedro@samsung.com>
Tue, 17 Sep 2024 06:19:41 +0000 (14:19 +0800)
committerBot Blink <blinkbot@samsung.com>
Mon, 23 Sep 2024 10:29:44 +0000 (10:29 +0000)
In current version, opened tabs data is uploaded to cloud every
time new tab button in URL bar is clicked

Change-Id: I440ea543d1cfad566ef5981f483320399e043288
Signed-off-by: Marc Dominic San Pedro <m.sanpedro@samsung.com>
chrome/browser/ui/BUILD.gn
chrome/browser/ui/browser_tabstrip.cc
chrome/browser/ui/samsung/opened_tabs_controller.cc [new file with mode: 0644]
chrome/browser/ui/samsung/opened_tabs_controller.h [new file with mode: 0644]
chrome/browser/ui/samsung/samsung_browser_core.cc
chrome/browser/ui/samsung/samsung_browser_core.h

index 2e6f9924f162a5dd126acc3bb79002b0e6db0a4b..cb3264ac1632aac6a7980176ce19d5236cabe63d 100644 (file)
@@ -6682,6 +6682,8 @@ static_library("ui") {
         "webui/settings/samsung/samsung_pass_handler.h",
         "samsung/storage_manager.cc",
         "samsung/storage_manager.h",
+        "samsung/opened_tabs_controller.cc",
+        "samsung/opened_tabs_controller.h",
         "samsung/hybrid_navigation_controller.cc",
         "samsung/hybrid_navigation_controller.h",
         "samsung/samsung_web_server_downloader.cc",
index 535d038f7023b3e7e1a9b6af2f2d5faadb45980d..ccb2547b7fb3ea7d60f1f51929f3439fe7cef25c 100644 (file)
 #include "ui/base/page_transition_types.h"
 #include "url/gurl.h"
 
+#if defined(SAMSUNG_NEXT_BROWSER)
+#include "chrome/browser/ui/samsung/samsung_browser_core.h"
+#endif
+
 namespace chrome {
 
 void AddTabAt(Browser* browser,
@@ -43,7 +47,16 @@ void AddTabAt(Browser* browser,
 
   if (!params.navigated_or_inserted_contents)
     return;
-
+#if defined(SAMSUNG_NEXT_BROWSER)
+  auto controller = samsung_browser_main::SamsungBrowserCore::instance()
+                        ->OpenedTabsController();
+  controller->RemoveThisDevice();
+  int tabCount = browser->tab_strip_model()->GetTabCount();
+  for (int i = 0; i < tabCount; i++) {
+    auto model = browser->tab_strip_model()->GetTabHandleAt(i).Get();
+    controller->PageLoaded(model);
+  }
+#endif
   CoreTabHelper* core_tab_helper =
       CoreTabHelper::FromWebContents(params.navigated_or_inserted_contents);
   core_tab_helper->set_new_tab_start_time(new_tab_start_time);
diff --git a/chrome/browser/ui/samsung/opened_tabs_controller.cc b/chrome/browser/ui/samsung/opened_tabs_controller.cc
new file mode 100644 (file)
index 0000000..46a6353
--- /dev/null
@@ -0,0 +1,65 @@
+#include <codecvt>
+
+#include "chrome/browser/ui/samsung/opened_tabs_controller.h"
+#include "chrome/browser/ui/samsung/samsung_browser_core.h"
+
+namespace samsung_browser_controller {
+
+OpenedTabsController::OpenedTabsController() {
+  opened_tab_model_ =
+      std::move(samsung_browser_main::SamsungBrowserCore::instance()
+                    ->StorageManager()
+                    ->openedTabModel());
+}
+
+OpenedTabsController::~OpenedTabsController() {}
+
+void OpenedTabsController::PageLoaded(const TabModel* model) {
+  auto url = model->contents()->GetVisibleURL();
+  std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> conv;
+  auto title = conv.to_bytes(model->contents()->GetTitle());
+  // if (url.isInternal())
+  // {
+  //   BROWSER_LOGD("url: is isInternal");
+  //   m_openTabModel->remove(m_openTabItems[model]);
+  //   return;
+  // }
+
+  auto systemConfiguration =
+      samsung_browser_main::SamsungBrowserCore::instance()
+          ->SystemConfiguration();
+  if (!systemConfiguration) {
+    LOG(ERROR) << "System configuration is null";
+    return;
+  }
+
+  auto thisDeviceID = systemConfiguration->GetString(
+      samsung_browser_fw_core::SamsungConfigKey::VDUID);
+  auto thisDeviceName = systemConfiguration->GetString(
+      samsung_browser_fw_core::SamsungConfigKey::TvName);
+
+  auto openTab = samsung_browser_fw_core::OpenedTabItem(
+      url.spec(), title, thisDeviceName, thisDeviceID);
+  opened_tab_items_[model] = openTab;
+  opened_tab_model_->add(openTab);
+}
+
+void OpenedTabsController::OnTabClosed(TabModel* model) {
+  opened_tab_model_->remove(opened_tab_items_[model]);
+  opened_tab_items_.erase(model);
+}
+
+void OpenedTabsController::OnTabCreated(TabModel* model) {
+  auto openTab = samsung_browser_fw_core::OpenedTabItem();
+  opened_tab_items_[model] = openTab;
+}
+
+void OpenedTabsController::RemoveThisDevice() {
+  std::string thisDevice =
+      samsung_browser_main::SamsungBrowserCore::instance()
+          ->SystemConfiguration()
+          ->GetString(samsung_browser_fw_core::SamsungConfigKey::VDUID);
+  opened_tab_model_->removeDevice(thisDevice);
+}
+
+}  // namespace samsung_browser_controller
diff --git a/chrome/browser/ui/samsung/opened_tabs_controller.h b/chrome/browser/ui/samsung/opened_tabs_controller.h
new file mode 100644 (file)
index 0000000..00fc789
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef CHROME_BROWSER_UI_SAMSUNG_OPENED_TABS_CONTROLLER_H_
+#define CHROME_BROWSER_UI_SAMSUNG_OPENED_TABS_CONTROLLER_H_
+
+#include "chrome/browser/ui/tabs/tab_model.h"
+#include "components/samsung/opened_tabs/opened_tab_item.h"
+#include "components/samsung/opened_tabs/opened_tab_model.h"
+
+namespace samsung_browser_controller {
+
+class OpenedTabsController {
+ public:
+  OpenedTabsController();
+  virtual ~OpenedTabsController();
+  void PageLoaded(const TabModel*);
+  void OnTabCreated(TabModel*);
+  void OnTabClosed(TabModel*);
+  void RemoveThisDevice();
+
+ private:
+  std::map<const TabModel*, samsung_browser_fw_core::OpenedTabItem>
+      opened_tab_items_;
+  std::unique_ptr<samsung_browser_storage::BPOpenedTabModel> opened_tab_model_;
+};
+
+}  // namespace samsung_browser_controller
+
+#endif  // CHROME_BROWSER_UI_SAMSUNG_OPENED_TABS_CONTROLLER_H_
index ca696d68fdf2b3fe280a7a6f8378cac443e29e24..5232bd107071b0c41807b8638f04baf83ccc55de 100644 (file)
@@ -77,6 +77,8 @@ void SamsungBrowserCore::Init() {
       std::make_unique<samsung_browser_controller::DataSyncController>(
           browser_);
   m_data_sync_controller->Init();
+  m_opened_tabs_controller =
+      std::make_unique<samsung_browser_controller::OpenedTabsController>();
 }
 
 SamsungBrowserCore::~SamsungBrowserCore() {}
index a57d605e0c7f931e4fd037cd3c30beb212b8e226..7da6d9c2372ab5754d05c26e706baeae24288478 100644 (file)
@@ -7,6 +7,7 @@
 #include "chrome/browser/ui/samsung/high_contrast_controller.h"
 #include "chrome/browser/ui/samsung/hybrid_navigation_controller.h"
 #include "chrome/browser/ui/samsung/input_manager.h"
+#include "chrome/browser/ui/samsung/opened_tabs_controller.h"
 #include "chrome/browser/ui/samsung/samsung_account_manager.h"
 #include "chrome/browser/ui/samsung/samsung_web_server_downloader.h"
 #include "chrome/browser/ui/samsung/storage_manager.h"
@@ -55,6 +56,10 @@ class SamsungBrowserCore {
     return m_data_sync_controller.get();
   };
 
+  samsung_browser_controller::OpenedTabsController* OpenedTabsController() {
+    return m_opened_tabs_controller.get();
+  }
+
   SamsungPass* GetSamsungPass() { return m_samsung_pass.get(); }
 
   aura::WindowTreeHost* GetWindowInstance();
@@ -73,6 +78,8 @@ class SamsungBrowserCore {
   std::unique_ptr<samsung_input_manager::InputManager> m_input_manager;
   std::unique_ptr<samsung_browser_controller::DataSyncController>
       m_data_sync_controller;
+  std::unique_ptr<samsung_browser_controller::OpenedTabsController>
+      m_opened_tabs_controller;
   std::unique_ptr<samsung_browser_configuration::SystemConfiguration>
       m_system_configuration_;
   std::unique_ptr<samsung_browser_controller::CursorController>