[NextBrowser] BrowserLite Local Bookmarks Implementation 83/324783/5
authorjmroman <jm.roman@samsung.com>
Thu, 8 May 2025 08:11:54 +0000 (16:11 +0800)
committerBot Blink <blinkbot@samsung.com>
Thu, 5 Jun 2025 14:03:19 +0000 (14:03 +0000)
- Used chromium's internal bookmark system as local bookmarks
- Integrated chromium's internal bookmark system with samsung web ui

Change-Id: I71052fc39aa0eda00d2edfec572c84c8b63db726
Signed-off-by: jmroman <jm.roman@samsung.com>
chrome/browser/resources/samsung/samsung_bookmarks_app.js
chrome/browser/resources/samsung/samsung_data_service.ts
chrome/browser/ui/browser_command_controller.cc
chrome/browser/ui/browser_commands.cc
chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
chrome/browser/ui/webui/samsung/samsung_bookmarks_handler.cc
chrome/browser/ui/webui/samsung/samsung_bookmarks_handler.h

index 2d1ecd836a3b4526be94b70d51a8a6da3e4e0081..80874d31a62fe636087e5b391a918b0ded1a8c2a 100644 (file)
@@ -218,7 +218,7 @@ onDialogCancelClick_(event) {
       samsungDataService.removeFolder(this.bookmarkIdToBeDeleted);
     }
     else{
-      samsungDataService.removeBookmark(bookmarkUrlToDelete);
+      samsungDataService.removeBookmark(bookmarkUrlToDelete, this.bookmarkIdToBeDeleted);
     }
 
     this.onthumbnailOptionsChanged_();
index 721823a097d5061da6f9b7af5ee4b1030b1816ef..49138c2b66e8e672ad4abbcc2faf73fc90ec2a7f 100644 (file)
@@ -27,7 +27,7 @@ export interface SamsungDataService {
     watchLaterClicked(watchLaterId:string):void;
     removeAllWatchLater(typeOfWatchLater:string):Promise<QueryResult>;
     removeWatchLater(watchLaterId:string):Promise<QueryResult>;
-    removeBookmark(url:string):void;
+    removeBookmark(url:string, uuid:string):void;
     removeFolder(id:string):void;
     removeAllBookmarks(id:string):void;
     removeDevice(deviceID:string):void;
@@ -83,8 +83,8 @@ export class SamsungDataServiceImpl implements SamsungDataService {
     watchLaterClicked(watchLaterId:string){
         chrome.send("watchLaterClicked",[watchLaterId]);
     }
-    removeBookmark(url:string){
-        chrome.send("removeBookmark",[url]);
+    removeBookmark(url:string, uuid:string = ""){
+        chrome.send("removeBookmark",[url, uuid]);
     }
     removeFolder(id:string){
         chrome.send("removeFolder",[id]);
index e36fdc60d0c7d5c065bab3c65ae73d79f18d4714..6b767bb652d0b7cabbcb664409d0069db0abcaaa 100644 (file)
 #include "ui/base/ui_base_features.h"
 #include "ui/base/window_open_disposition.h"
 #include "ui/events/keycodes/keyboard_codes.h"
-#if defined(SAMSUNG_MENU_TREE_UI)
+
+#if defined(SAMSUNG_NEXT_BROWSER)
 #include "chrome/browser/ui/samsung/samsung_browser_core.h"
+#include "chrome/common/chrome_switches.h"
 #endif
 
 #if BUILDFLAG(IS_MAC)
@@ -485,7 +487,7 @@ bool BrowserCommandController::ExecuteCommandWithDisposition(
       NewTab(browser_);
       break;
     }
-#if defined(SAMSUNG_MENU_TREE_UI)
+#if defined(SAMSUNG_NEXT_BROWSER)
     case IDC_SAMSUNG_OPEN_FEATURED: {
       NewTabWithURL(browser_, "chrome://featured");
       break;
@@ -876,7 +878,7 @@ bool BrowserCommandController::ExecuteCommandWithDisposition(
                           chrome::kPeopleSubPage);
       break;
     case IDC_SHOW_BOOKMARK_MANAGER:
-#if defined(SAMSUNG_MENU_TREE_UI)
+#if defined(SAMSUNG_NEXT_BROWSER)
       NewTabWithURL(browser_, "chrome://featured/#bookmarks");
 #else
       ShowBookmarkManager(browser_->GetBrowserForOpeningWebUi());
@@ -1249,7 +1251,7 @@ void BrowserCommandController::InitCommandState() {
   command_updater_.UpdateCommandEnabled(
       IDC_NEW_TAB, !browser_->app_controller() ||
                        !browser_->app_controller()->ShouldHideNewTabButton());
-#if defined(SAMSUNG_MENU_TREE_UI)
+#if defined(SAMSUNG_NEXT_BROWSER)
   command_updater_.UpdateCommandEnabled(IDC_SAMSUNG_OPEN_FEATURED, true);
   command_updater_.UpdateCommandEnabled(IDC_SAMSUNG_OPEN_PWA, true);
 #endif
@@ -1611,28 +1613,38 @@ void BrowserCommandController::UpdateCommandsForTabState() {
   command_updater_.UpdateCommandEnabled(IDC_WINDOW_GROUP_TAB, is_normal);
 
   // Page-related commands
-#if defined(SAMSUNG_MENU_TREE_UI)
-  auto samsung_browser_core =
-      samsung_browser_main::SamsungBrowserCore::instance();
-  if (samsung_browser_core) {
-    auto bookmark_button_controller =
-        samsung_browser_core->BookmarkButtonController();
-    if (bookmark_button_controller) {
-      std::string url = current_web_contents->GetURL().spec();
-      bool is_bookmarked_by_user;
-      if (url.substr(0, 9).compare("chrome://") == 0 || url.empty()) {
-        is_bookmarked_by_user = false;
-      } else {
-        LOG(INFO) << "Valid URL. Check if URL is Bookmarked: " << url;
-        is_bookmarked_by_user = bookmark_button_controller->isBookmarked(url);
+#if defined(SAMSUNG_NEXT_BROWSER)
+  const base::CommandLine* command_line =
+      base::CommandLine::ForCurrentProcess();
+
+  bool is_browser_lite = command_line->HasSwitch(switches::kBrowserLite);
+
+  if (is_browser_lite) {
+    window()->SetStarredState(
+        BookmarkTabHelper::FromWebContents(current_web_contents)->is_starred());
+  } else {
+    auto samsung_browser_core =
+        samsung_browser_main::SamsungBrowserCore::instance();
+    if (samsung_browser_core) {
+      auto bookmark_button_controller =
+          samsung_browser_core->BookmarkButtonController();
+      if (bookmark_button_controller) {
+        std::string url = current_web_contents->GetURL().spec();
+        bool is_bookmarked_by_user;
+        if (url.substr(0, 9).compare("chrome://") == 0 || url.empty()) {
+          is_bookmarked_by_user = false;
+        } else {
+          LOG(INFO) << "Valid URL. Check if URL is Bookmarked: " << url;
+          is_bookmarked_by_user = bookmark_button_controller->isBookmarked(url);
+        }
+        window()->SetStarredState(is_bookmarked_by_user);
       }
-      window()->SetStarredState(is_bookmarked_by_user);
     }
   }
 #else
   window()->SetStarredState(
       BookmarkTabHelper::FromWebContents(current_web_contents)->is_starred());
-#endif  // SAMSUNG_MENU_TREE_UI
+#endif  // SAMSUNG_NEXT_BROWSER
   window()->ZoomChangedForActiveTab(false);
   command_updater_.UpdateCommandEnabled(IDC_VIEW_SOURCE,
                                         CanViewSource(browser_));
index dd8119a2c72347b6172f45fdb88d76a91f5f49ef..3abd70583f0995e69eb499130e1f8b21b734f6d8 100644 (file)
 #if defined(SAMSUNG_NEXT_BROWSER)
 #include "chrome/browser/ui/samsung/samsung_browser_core.h"
 #include "components/url_formatter/url_fixer.h"
+#include "chrome/common/chrome_switches.h"
 #endif
 
 #if !BUILDFLAG(IS_ANDROID)
@@ -1408,45 +1409,82 @@ void Exit() {
 
 void BookmarkCurrentTab(Browser* browser) {
   LOG(INFO) << "In BookmarkCurrentTab";
-// Add Bookmark to Cloud
 #if defined(SAMSUNG_NEXT_BROWSER)
-  content::WebContents* const web_contents =
-      browser->tab_strip_model()->GetActiveWebContents();
+  const base::CommandLine* command_line =
+      base::CommandLine::ForCurrentProcess();
 
-  auto samsung_browser_core =
-      samsung_browser_main::SamsungBrowserCore::instance();
-  if (!samsung_browser_core) {
-    LOG(INFO) << "samsung_browser_core null";
-    return;
-  }
-  auto bookmark_button_controller =
-      samsung_browser_core->BookmarkButtonController();
-  if (!bookmark_button_controller) {
-    LOG(INFO) << "bookmark_button_controller null";
-    return;
-  }
+  bool is_browser_lite = command_line->HasSwitch(switches::kBrowserLite);
 
-  auto watch_later_controller = samsung_browser_core->WatchLaterController();
-  if (!watch_later_controller) {
-    LOG(INFO) << "watch_later_controller null";
-    return;
-  }
+  if (is_browser_lite) {
+    // Add Bookmark to Local Chromium
+    base::RecordAction(base::UserMetricsAction("Star"));
+    BookmarkModel* model =
+        BookmarkModelFactory::GetForBrowserContext(browser->profile());
 
-  const GURL& url = web_contents->GetURL();
-  std::string spec = url.spec();
+    GURL url;
+    std::u16string title;
+    if (!BookmarkCurrentTabHelper(browser, model, &url, &title)) {
+      return;
+    }
 
-  bool is_bookmarked_by_user = bookmark_button_controller->isBookmarked(spec);
-  samsung_browser_fw_core::WatchlaterIconState watch_later_icon_state =
-      watch_later_controller->GetWatchLaterIconState(spec);
-  // Make sure the model actually added a bookmark before showing the star. A
-  // bookmark isn't created if the url is invalid.
-  if (browser->window()->IsActive()) {
-    // Only show the bubble if the window is active, otherwise we may get into
-    // weird situations where the bubble is deleted as soon as it is shown.
-    browser->window()->ShowSamsungBookmarkBubble(url, is_bookmarked_by_user,
-                                                 watch_later_icon_state);
+    base::RecordAction(base::UserMetricsAction("Star"));
+    bool was_bookmarked_by_user = bookmarks::IsBookmarkedByUser(model, url);
+
+    bookmarks::AddIfNotBookmarked(model, url, title);
+    bool is_bookmarked_by_user = bookmarks::IsBookmarkedByUser(model, url);
+    // Make sure the model actually added a bookmark before showing the star. A
+    // bookmark isn't created if the url is invalid.
+
+    if (browser->window()->IsActive() && is_bookmarked_by_user) {
+      // Only show the bubble if the window is active, otherwise we may get into
+      // weird situations where the bubble is deleted as soon as it is shown.
+      browser->window()->ShowBookmarkBubble(url, was_bookmarked_by_user);
+    }
+
+    if (!was_bookmarked_by_user && is_bookmarked_by_user) {
+      RecordBookmarksAdded(browser->profile());
+    }
+  } else {
+    // Add Bookmark to Cloud
+    content::WebContents* const web_contents =
+        browser->tab_strip_model()->GetActiveWebContents();
+
+    auto samsung_browser_core =
+        samsung_browser_main::SamsungBrowserCore::instance();
+    if (!samsung_browser_core) {
+      LOG(INFO) << "samsung_browser_core null";
+      return;
+    }
+    auto bookmark_button_controller =
+        samsung_browser_core->BookmarkButtonController();
+    if (!bookmark_button_controller) {
+      LOG(INFO) << "bookmark_button_controller null";
+      return;
+    }
+
+    auto watch_later_controller = samsung_browser_core->WatchLaterController();
+    if (!watch_later_controller) {
+      LOG(INFO) << "watch_later_controller null";
+      return;
+    }
+
+    const GURL& url = web_contents->GetURL();
+    std::string spec = url.spec();
+
+    bool is_bookmarked_by_user = bookmark_button_controller->isBookmarked(spec);
+    samsung_browser_fw_core::WatchlaterIconState watch_later_icon_state =
+        watch_later_controller->GetWatchLaterIconState(spec);
+    // Make sure the model actually added a bookmark before showing the star. A
+    // bookmark isn't created if the url is invalid.
+    if (browser->window()->IsActive()) {
+      // Only show the bubble if the window is active, otherwise we may get into
+      // weird situations where the bubble is deleted as soon as it is shown.
+      browser->window()->ShowSamsungBookmarkBubble(url, is_bookmarked_by_user,
+                                                   watch_later_icon_state);
+    }
   }
-#else
+
+#else  // SAMSUNG_NEXT_BROWSER
   base::RecordAction(base::UserMetricsAction("Star"));
   BookmarkModel* model =
       BookmarkModelFactory::GetForBrowserContext(browser->profile());
@@ -1464,7 +1502,7 @@ void BookmarkCurrentTab(Browser* browser) {
     prefs->SetBoolean(bookmarks::prefs::kAddedBookmarkSincePowerBookmarksLaunch,
                       true);
   }
-#endif
+#endif  // IS_ANDROID
   bookmarks::AddIfNotBookmarked(model, url, title);
   bool is_bookmarked_by_user = bookmarks::IsBookmarkedByUser(model, url);
   // Make sure the model actually added a bookmark before showing the star. A
@@ -1478,7 +1516,7 @@ void BookmarkCurrentTab(Browser* browser) {
   if (!was_bookmarked_by_user && is_bookmarked_by_user) {
     RecordBookmarksAdded(browser->profile());
   }
-#endif
+#endif  // SAMSUNG_NEXT_BROWSER
 }
 
 void BookmarkCurrentTabInFolder(Browser* browser, int64_t folder_id) {
index d8b0572dd0915229ff7acd7750e09c586114473c..ab1398af15e1e8e7e8c50cbc4b2f38fb7437d162 100644 (file)
@@ -296,12 +296,12 @@ class BookmarkBubbleView::BookmarkBubbleDelegate
       base::RecordAction(
           UserMetricsAction("BookmarkBubble_ChangeTitleInBubble"));
     }
-
+#if !defined(SAMSUNG_NEXT_BROWSER)
     GetFolderModel()->MaybeChangeParent(
         node, dialog_model()
                   ->GetComboboxByUniqueId(kBookmarkFolderFieldId)
                   ->selected_index());
-
+#endif  // !SAMSUNG_NEXT_BROWSER
     browser_->window()->MaybeShowFeaturePromo(
         feature_engagement::kIPHPowerBookmarksSidePanelFeature);
   }
@@ -407,6 +407,7 @@ void BookmarkBubbleView::ShowBubble(
           bookmark_node->GetTitle(),
           ui::DialogModelTextfield::Params().SetAccessibleName(
               l10n_util::GetStringUTF16(IDS_BOOKMARK_AX_BUBBLE_NAME_LABEL)))
+#if !defined(SAMSUNG_NEXT_BROWSER)
       .AddCombobox(
           kBookmarkFolderFieldId,
           l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_FOLDER_LABEL),
@@ -416,6 +417,7 @@ void BookmarkBubbleView::ShowBubble(
           ui::DialogModelCombobox::Params().SetCallback(
               base::BindRepeating(&BookmarkBubbleDelegate::OnComboboxAction,
                                   base::Unretained(bubble_delegate))))
+#endif  // !SAMSUNG_NEXT_BROWSER
       .SetInitiallyFocusedField(initially_focused_field);
 
   if (commerce::CanTrackPrice(product_info)) {
index 8fb9ba15c961488bbaea52d4438d92236faf401e..77fcc19419ff4c6e026b1e8992888636b83fe0c8 100644 (file)
@@ -4,17 +4,28 @@
 #include <set>
 #include "base/logging.h"
 
+#include "base/base64.h"
+#include "base/command_line.h"
 #include "base/functional/bind.h"
 #include "base/functional/callback_helpers.h"
+#include "base/location.h"
 #include "base/task/thread_pool.h"
+#include "chrome/browser/bookmarks/bookmark_model_factory.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/samsung/cursor_controller.h"
+#include "chrome/browser/ui/samsung/samsung_account_manager.h"
+#include "chrome/browser/ui/samsung/samsung_browser_core.h"
+#include "chrome/common/chrome_switches.h"
+#include "components/bookmarks/browser/bookmark_model.h"
+#include "components/bookmarks/browser/bookmark_node.h"
+#include "components/samsung/opened_tabs/samsung_bpopened_tab_model.h"
+#include "components/samsung/public/samsung_utility.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/url_data_source.h"
 #include "content/public/browser/web_ui.h"
-#include "chrome/browser/ui/samsung/samsung_browser_core.h"
-#include "components/samsung/public/samsung_utility.h"
-#include "components/samsung/opened_tabs/samsung_bpopened_tab_model.h"
-#include "chrome/browser/ui/samsung/samsung_account_manager.h"
+#include "ui/gfx/codec/png_codec.h"
+#include "ui/gfx/image/image.h"
 
 SamsungBookmarksHandler::SamsungBookmarksHandler(){
   Init();
@@ -93,12 +104,25 @@ void SamsungBookmarksHandler::HandleGetBookmarksData(const base::Value::List& ar
   AllowJavascript();
   LOG(INFO) << "HandleGetBookmarksData start";
 
-  const std::string url = args[0].GetString();
+  if (IsBrowserLite()) {
+    // Do fetch of Local Bookmarks on a Different Thread
+    base::RepeatingCallback<void()> fetchTask = base::BindRepeating(
+        &SamsungBookmarksHandler::HandleGetLocalBookmarksDataThreadCb,
+        base::Unretained(this), this);
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+        fetchTask);
+  } else {
+    const std::string url = args[0].GetString();
 
-  //Do fetch of Bookmarks on a Different Thread
-  base::RepeatingCallback<void()> fetchTask = base::BindRepeating(&SamsungBookmarksHandler::HandleGetBookmarksDataThreadCb, base::Unretained(this), this, url);
-  base::ThreadPool::PostTask(
-      FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, fetchTask);
+    // Do fetch of Bookmarks on a Different Thread
+    base::RepeatingCallback<void()> fetchTask = base::BindRepeating(
+        &SamsungBookmarksHandler::HandleGetBookmarksDataThreadCb,
+        base::Unretained(this), this, url);
+    base::ThreadPool::PostTask(
+        FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
+        fetchTask);
+  }
 }
 
 void SamsungBookmarksHandler::HandleGetBookmarksDataThreadCb(void* user_data, const std::string url){
@@ -128,14 +152,150 @@ void SamsungBookmarksHandler::HandleGetBookmarksDataThreadCb(void* user_data, co
   FireWebUIListener("show-bookmarks-data", final_results);
 }
 
+std::string ImageToBase64(const gfx::Image& image) {
+  if (image.IsEmpty()) {
+    return "";
+  }
+
+  // Get the bitmap representation
+  const SkBitmap* bitmap = image.ToSkBitmap();
+  if (!bitmap || bitmap->isNull()) {
+    return "";
+  }
+
+  // Encode the bitmap to PNG
+  std::vector<unsigned char> png_data;
+  if (!gfx::PNGCodec::EncodeBGRASkBitmap(*bitmap, false, &png_data)) {
+    return "";
+  }
+
+  // Convert PNG data to base64
+  return base::Base64Encode(base::make_span(png_data));
+}
+
+void ProcessNode(const bookmarks::BookmarkNode* node,
+                 int depth,
+                 std::vector<samsung_browser_fw_core::BookmarkItem>* bookmarks,
+                 std::string parent_id,
+                 bookmarks::BookmarkModel* model) {
+  if (!node)
+    return;
+
+  std::string indent(depth * 2, ' ');
+
+  if (node->is_url()) {
+    LOG(INFO) << indent << "- " << base::UTF16ToUTF8(node->GetTitle()) << ": "
+              << node->url().spec() << "\n";
+    auto favicon = model->GetFavicon(node);
+
+    samsung_browser_fw_core::BookmarkItem tmp(
+        node->uuid().AsLowercaseString(),     // id
+        node->url().spec(),                   // url
+        base::UTF16ToUTF8(node->GetTitle()),  // title
+        ImageToBase64(favicon),
+        samsung_browser_fw_core::BookmarkType::UserBookmark,
+        samsung_browser_fw_core::BookmarkItemType::Bookmark, parent_id);
+
+    bookmarks->push_back(tmp);
+  } else if (node->is_folder()) {
+    for (int i = 0; i < node->children().size(); ++i) {
+      ProcessNode(node->children()[i].get(), depth + 1, bookmarks,
+                  std::to_string(node->id()), model);
+    }
+  }
+}
+
+void SamsungBookmarksHandler::GetAllLocalBookmarksData(
+    std::vector<samsung_browser_fw_core::BookmarkItem>* bookmarks) {
+  LOG(INFO) << "GetAllLocalBookmarksData";
+  bookmarks->clear();
+
+  Browser* browser = BrowserList::GetInstance()->GetLastActive();
+  if (!browser) {
+    LOG(INFO) << "browser is null";
+    return;
+  }
+  Profile* profile = browser->profile();
+  bookmarks::BookmarkModel* model =
+      BookmarkModelFactory::GetForBrowserContext(profile);
+
+  if (!model->loaded()) {
+    LOG(INFO) << "Model not yet loaded";
+    return;
+  }
+
+  const bookmarks::BookmarkNode* root_node = model->root_node();
+  ProcessNode(root_node, 0, bookmarks, "", model);
+}
+
+void SamsungBookmarksHandler::HandleGetLocalBookmarksDataThreadCb(
+    void* user_data) {
+  SamsungBookmarksHandler* self =
+      static_cast<SamsungBookmarksHandler*>(user_data);
+  LOG(INFO) << "SamsungBookmarksHandler::HandleGetLocalBookmarksDataThreadCb";
+
+  std::vector<samsung_browser_fw_core::BookmarkItem> bookmarks;
+  self->GetAllLocalBookmarksData(&bookmarks);
+
+  base::Value::Dict final_results;
+  base::Value::Dict results_info;
+  for (auto& bookmark : bookmarks) {
+    results_info.Set("title", bookmark.getTitle());
+    results_info.Set("url", bookmark.getURL());
+    results_info.Set("favicon_data", bookmark.getSourceName());
+    if (bookmark.getItemType() ==
+        samsung_browser_fw_core::BookmarkItemType::Folder) {
+      results_info.Set("itemType", "Folder");
+    } else {
+      results_info.Set("itemType", "Bookmark");
+    }
+    final_results.Set(bookmark.getID().toString(), std::move(results_info));
+    results_info.clear();
+  }
+  FireWebUIListener("show-bookmarks-data", final_results);
+}
+
 void SamsungBookmarksHandler::HandleRemoveBookmark(const base::Value::List& args) {
   AllowJavascript();
   LOG(INFO) << "HandleRemoveBookmark";
   const std::string& url = args[0].GetString();
-  LOG(INFO) << "HandleRemoveBookmark" << url;
-  auto bookmark_controller = samsung_browser_main::SamsungBrowserCore::instance()->BookmarkButtonController();
-  if(url.length() > 0) {
-    bookmark_controller->RemoveBookmark(url);
+  const std::string& uuid = args[1].GetString();
+
+  if (IsBrowserLite()) {
+    Browser* browser = BrowserList::GetInstance()->GetLastActive();
+    if (!browser) {
+      LOG(INFO) << "browser is null";
+      return;
+    }
+    Profile* profile = browser->profile();
+    bookmarks::BookmarkModel* model =
+        BookmarkModelFactory::GetForBrowserContext(profile);
+
+    if (!model->loaded()) {
+      LOG(INFO) << "Model not yet loaded";
+      return;
+    }
+
+    const base::Uuid& bookmark_node_uuid =
+        base::Uuid::ParseCaseInsensitive(uuid);
+
+    if (!bookmark_node_uuid.is_valid()) {
+      LOG(INFO) << "Invalid Bookmark UUID";
+      return;
+    }
+
+    const bookmarks::BookmarkNode* bookmark_node =
+        model->GetNodeByUuid(bookmark_node_uuid, bookmarks::BookmarkModel::NodeTypeForUuidLookup::kLocalOrSyncableNodes);
+    model->Remove(bookmark_node, bookmarks::metrics::BookmarkEditSource::kUser, base::Location::Current());
+    BookmarkStateChanged();
+  } else {
+    LOG(INFO) << "HandleRemoveBookmark" << url;
+    auto bookmark_controller =
+        samsung_browser_main::SamsungBrowserCore::instance()
+            ->BookmarkButtonController();
+    if (url.length() > 0) {
+      bookmark_controller->RemoveBookmark(url);
+    }
   }
 }
 
@@ -153,10 +313,31 @@ void SamsungBookmarksHandler::HandleRemoveFolder(const base::Value::List& args)
 void SamsungBookmarksHandler::HandleRemoveAllBookmarks(const base::Value::List& args) {
   AllowJavascript();
   LOG(INFO) << "HandleRemoveAllBookmarks";
-  const std::string& id = args[0].GetString();
-  LOG(INFO) << "HandleRemoveFolder" << id;
-  auto bookmark_controller = samsung_browser_main::SamsungBrowserCore::instance()->BookmarkButtonController();
-  bookmark_controller->RemoveAllBookmarks(id);
+
+  if (IsBrowserLite()) {
+    Browser* browser = BrowserList::GetInstance()->GetLastActive();
+    if (!browser) {
+      LOG(INFO) << "browser is null";
+      return;
+    }
+    Profile* profile = browser->profile();
+    bookmarks::BookmarkModel* model =
+        BookmarkModelFactory::GetForBrowserContext(profile);
+
+    if (!model->loaded()) {
+      LOG(INFO) << "Model not yet loaded";
+      return;
+    }
+    model->RemoveAllUserBookmarks(base::Location::Current());
+    BookmarkStateChanged();
+  } else {
+    const std::string& id = args[0].GetString();
+    LOG(INFO) << "HandleRemoveFolder" << id;
+    auto bookmark_controller =
+        samsung_browser_main::SamsungBrowserCore::instance()
+            ->BookmarkButtonController();
+    bookmark_controller->RemoveAllBookmarks(id);
+  }
 }
 
 std::string SamsungBookmarksHandler::getFavicon(const std::string& url) {
@@ -209,15 +390,46 @@ void SamsungBookmarksHandler::HandleEditBookmark(const base::Value::List& args)
   const std::string& id = args[0].GetString();
   const std::string& title = args[1].GetString();
   const std::string& url = args[2].GetString();
-  // LOG(INFO) << "HandleEditBookmark " << id << " " << url << " " << title;
-  // LOG(INFO) << "HandleEditBookmark " << args[0] << " " << args[1];
-  LOG(INFO) << "HandleEditBookmark " << args[0].GetString();
-  LOG(INFO) << "HandleEditBookmark " << args[1].GetString();
-  LOG(INFO) << "HandleEditBookmark " << args[2].GetString();
-  auto bookmark_controller = samsung_browser_main::SamsungBrowserCore::instance()->BookmarkButtonController();
-  bookmark_controller->EditBookmark(samsung_browser_fw_core::BookmarkID(id), url, title);
-  bool refresh = true;
-  FireWebUIListener("change-in-bookmarks-data", base::Value(refresh));
+
+  if (IsBrowserLite()) {
+    Browser* browser = BrowserList::GetInstance()->GetLastActive();
+    if (!browser) {
+      LOG(INFO) << "browser is null";
+      return;
+    }
+    Profile* profile = browser->profile();
+    bookmarks::BookmarkModel* model =
+        BookmarkModelFactory::GetForBrowserContext(profile);
+
+    if (!model->loaded()) {
+      LOG(INFO) << "Model not yet loaded";
+      return;
+    }
+
+    const base::Uuid& bookmark_node_uuid = base::Uuid::ParseCaseInsensitive(id);
+
+    if (!bookmark_node_uuid.is_valid()) {
+      LOG(INFO) << "Invalid Bookmark UUID";
+      return;
+    }
+
+    const bookmarks::BookmarkNode* bookmark_node =
+        model->GetNodeByUuid(bookmark_node_uuid, bookmarks::BookmarkModel::NodeTypeForUuidLookup::kLocalOrSyncableNodes);
+    model->SetTitle(bookmark_node, base::UTF8ToUTF16(title),
+                    bookmarks::metrics::BookmarkEditSource::kUser);
+    model->SetURL(bookmark_node, GURL(url),
+                  bookmarks::metrics::BookmarkEditSource::kUser);
+
+    BookmarkStateChanged();
+  } else {
+    auto bookmark_controller =
+        samsung_browser_main::SamsungBrowserCore::instance()
+            ->BookmarkButtonController();
+    bookmark_controller->EditBookmark(samsung_browser_fw_core::BookmarkID(id),
+                                      url, title);
+    bool refresh = true;
+    FireWebUIListener("change-in-bookmarks-data", base::Value(refresh));
+  }
 }
 
 void SamsungBookmarksHandler::bookmarkAddedCallback(){
@@ -252,3 +464,10 @@ void SamsungBookmarksHandler::RemoveImeChangedObserver(const base::Value::List&
     system_config_manager->RemoveImfChangedObserver(this);
   }
 }
+
+bool SamsungBookmarksHandler::IsBrowserLite() {
+  const base::CommandLine* command_line =
+      base::CommandLine::ForCurrentProcess();
+
+  return command_line->HasSwitch(switches::kBrowserLite);
+}
\ No newline at end of file
index 0a2b1da5018c157af171814675fbc797f350e1dc..d8901386a8b97089f1bb82bbc177b72a8796b5bb 100644 (file)
@@ -27,6 +27,9 @@ class SamsungBookmarksHandler
   std::string getFavicon(const std::string& url);
   void HandleGetBookmarksData(const base::Value::List& args);
   void HandleGetBookmarksDataThreadCb(void* user_data, const std::string url);
+  void HandleGetLocalBookmarksDataThreadCb(void* user_data);
+  void GetAllLocalBookmarksData(
+      std::vector<samsung_browser_fw_core::BookmarkItem>* bookmarks);
   void HandleRemoveBookmark(const base::Value::List& args);
   void HandleRemoveFolder(const base::Value::List& args);
   void HandleRemoveAllBookmarks(const base::Value::List& args);
@@ -37,5 +40,6 @@ class SamsungBookmarksHandler
   void ImfChanged(bool state) override;
   void AddImeChangedObserver(const base::Value::List& args);
   void RemoveImeChangedObserver(const base::Value::List& args);
+  bool IsBrowserLite();
 };
 // #endif