[M108 Migration][API] Migrate favicon related patches 45/287045/3
authorayush.k123 <ayush.k123@samsung.com>
Thu, 19 Jan 2023 05:30:29 +0000 (11:00 +0530)
committerAyush Kumar <ayush.k123@samsung.com>
Fri, 20 Jan 2023 08:24:02 +0000 (13:54 +0530)
This change adds modification related to favicon.

References: https://review.tizen.org/gerrit/273261/

Change-Id: I0e72acea7c54565aef4eeb76194e73e8320b3d94
Signed-off-by: Ayush Kumar <ayush.k123@samsung.com>
12 files changed:
tizen_src/ewk/efl_integration/BUILD.gn
tizen_src/ewk/efl_integration/browser/favicon/favicon_commands.cc
tizen_src/ewk/efl_integration/browser/favicon/favicon_commands.h
tizen_src/ewk/efl_integration/browser/favicon/favicon_database.cc
tizen_src/ewk/efl_integration/browser/favicon/favicon_database_p.cc
tizen_src/ewk/efl_integration/browser/favicon/favicon_database_p.h
tizen_src/ewk/efl_integration/common/skia_bitmap_utils.cc [new file with mode: 0644]
tizen_src/ewk/efl_integration/common/skia_bitmap_utils.h [new file with mode: 0644]
tizen_src/ewk/efl_integration/eweb_context.cc
tizen_src/ewk/efl_integration/private/ewk_notification_private.cc
tizen_src/ewk/efl_integration/public/ewk_context.cc
tizen_src/ewk/efl_integration/web_contents_delegate_efl.cc

index 8965db0..c04d0c6 100755 (executable)
@@ -353,6 +353,8 @@ shared_library("chromium-ewk") {
     "common/print_pages_params.cc",
     "common/print_pages_params.h",
     "common/render_messages_ewk.h",
+    "common/skia_bitmap_utils.cc",
+    "common/skia_bitmap_utils.h",
     "common/version_info.cc",
     "common/version_info.h",
     "common/version_info_efl.h",
index a636ca4..29cee94 100644 (file)
@@ -3,9 +3,13 @@
 // found in the LICENSE file.
 
 #include "browser/favicon/favicon_commands.h"
-#include "browser/favicon/favicon_database_p.h"
-#include "third_party/sqlite/sqlite3.h"
+
 #include <iostream>
+#include <memory>
+
+#include "browser/favicon/favicon_database_p.h"
+#include "common/skia_bitmap_utils.h"
+#include "url/gurl.h"
 
 #define CHECK_RESULT(qry, var, res, st, ret) if (var != res) {\
                                           sqlite3_finalize(st);\
                                               return ret;\
                                             }
 
+namespace {
 
-std::string Command::lastError() const {
-  return std::string("[") + m_name + "] :: " + m_lastError;
-}
+struct SerializedBitmap {
+  SerializedBitmap() : data(0), size(0) {}
+  ~SerializedBitmap() { free(); }
 
-std::string Command::name() const {
-  return m_name;
-}
+  void alloc(size_t n) {
+    data = ::operator new(n);
+    size = n;
+  }
 
-void Command::setError(const std::string &err) {
-  m_lastError = err;
-}
+  void free() {
+    if (data) {
+      ::operator delete(data);
+      data = nullptr;
+      size = 0;
+    }
+  }
 
-scoped_refptr<SerializedBitmap> Command::serialize(const SkBitmap &bitmap) {
-  scoped_refptr<SerializedBitmap> res(new SerializedBitmap);
+  void* data;
+  size_t size;
+};
+
+std::unique_ptr<SerializedBitmap> serialize(const SkBitmap& bitmap) {
+  std::unique_ptr<SerializedBitmap> res(new SerializedBitmap);
   if (bitmap.isNull()) {
     return res;
   }
@@ -51,15 +65,14 @@ scoped_refptr<SerializedBitmap> Command::serialize(const SkBitmap &bitmap) {
   static_cast<int *>(res->data)[1] = static_cast<int>(bitmap.alphaType());
   static_cast<int *>(res->data)[2] = bitmap.width();
   static_cast<int *>(res->data)[3] = bitmap.height();
-#if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
-  if (!bitmap.copyPixelsTo(static_cast<int *>(res->data) + 4, bitmap.getSize())) {
+  if (!skia_bitmap_utils::CopyPixels(static_cast<int*>(res->data) + 4,
+                                     bitmap.getPixels(), bitmap.info())) {
     res->free();
   }
-#endif
   return res;
 }
 
-SkBitmap Command::deserialize(const void *data) {
+SkBitmap deserialize(const void* data) {
   if (!data) {
     return SkBitmap();
   }
@@ -77,12 +90,25 @@ SkBitmap Command::deserialize(const void *data) {
   // the deserialized SkBitmap owns and holds it's internal image data
   // for it's whole lifetime, we create a deep copy of the |bitmap|.
   SkBitmap copy;
-#if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
-  bitmap.copyTo(&copy, colorType);
-#endif
+  if (copy.tryAllocPixels(bitmap.info()))
+    bitmap.readPixels(copy.info(), copy.getPixels(), copy.rowBytes(), 0, 0);
   return copy;
 }
 
+}  // namespace
+
+std::string Command::lastError() const {
+  return std::string("[") + m_name + "] :: " + m_lastError;
+}
+
+std::string Command::name() const {
+  return m_name;
+}
+
+void Command::setError(const std::string& err) {
+  m_lastError = err;
+}
+
 const char *Command::sqlite3ErrStr(int rc) {
   static const char* const aMsg[] = {
     /* SQLITE_OK          */ "not an error",
@@ -322,7 +348,7 @@ bool InsertBitmapCommand::sqlExecute() {
   result = sqlite3_bind_text(stmt, 1, m_faviconUrl.c_str(), m_faviconUrl.size(), SQLITE_STATIC);
   CHECK_RESULT_MSG(query, result, SQLITE_OK, stmt, false);
 
-  scoped_refptr<SerializedBitmap> serializedBitmap = serialize(m_bitmap);
+  std::unique_ptr<SerializedBitmap> serializedBitmap = serialize(m_bitmap);
   if (!serializedBitmap->data) {
     sqlite3_finalize(stmt);
     sqlite3_free(query);
@@ -363,7 +389,7 @@ bool UpdateBitmapCommand::sqlExecute() {
   int result = sqlite3_prepare_v2(db()->sqlite, query, -1, &stmt, 0);
   CHECK_PREP_MSG(query, result, SQLITE_OK, false);
 
-  scoped_refptr<SerializedBitmap> serializedBitmap = serialize(m_bitmap);
+  std::unique_ptr<SerializedBitmap> serializedBitmap = serialize(m_bitmap);
   if (!serializedBitmap->data) {
     sqlite3_finalize(stmt);
     return false;
index b6c5bfd..509c859 100644 (file)
@@ -5,36 +5,12 @@
 #ifndef FAVICON_COMMANDS_H
 #define FAVICON_COMMANDS_H
 
-#include "url/gurl.h"
-#include "base/memory/ref_counted.h"
+#include <string>
 #include "third_party/skia/include/core/SkBitmap.h"
 
+class GURL;
 class FaviconDatabasePrivate;
 
-struct SerializedBitmap : public base::RefCounted<SerializedBitmap> {
-  SerializedBitmap() : data(0), size(0) {}
-  ~SerializedBitmap() {
-    free();
-  }
-
-  void alloc(size_t n) {
-    free();
-    data = ::operator new(n);
-    size = n;
-  }
-
-  void free() {
-    if (data) {
-      ::operator delete(data);
-      data = 0;
-      size = 0;
-    }
-  }
-
-  void *data;
-  size_t size;
-};
-
 class Command {
  public:
   Command(const std::string &cmdName, FaviconDatabasePrivate *db)
@@ -47,8 +23,6 @@ class Command {
   std::string name() const;
 
  protected:
-  static scoped_refptr<SerializedBitmap> serialize(const SkBitmap &bitmap);
-  static SkBitmap deserialize(const void *data);
   static const char *sqlite3ErrStr(int rc);
 
   FaviconDatabasePrivate *db() const {
index 3e52dbf..e35d7c8 100644 (file)
@@ -9,7 +9,6 @@
 #include "base/logging.h"
 #include "base/task/bind_post_task.h"
 #include "base/task/thread_pool.h"
-#include "content/public/browser/browser_task_traits.h"
 #include "favicon_commands.h"
 #include "favicon_database_p.h"
 
@@ -201,6 +200,14 @@ bool FaviconDatabase::Open() {
     }
     g_sqlite3_initialized = true;
   }
+
+  if (d->path.empty())
+    return false;
+
+  base::FilePath dir = d->path.DirName();
+  if (!base::DirectoryExists(dir) && !base::CreateDirectory(dir))
+    return false;
+
   result_code = sqlite3_open(d->path.value().c_str(), &d->sqlite);
   if (result_code != SQLITE_OK) {
     LOG(ERROR) << "[FaviconDatabase] :: Error opening SQLite database ("
@@ -225,17 +232,9 @@ void FaviconDatabase::Close() {
 }
 
 void FaviconDatabase::SyncSQLite() {
-#if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
-  scoped_refptr<base::SingleThreadTaskRunner> ptr =
-      content::BrowserThread::GetTaskRunnerForThread(
-          content::BrowserThread::DB);
-#else
-  scoped_refptr<base::SingleThreadTaskRunner> ptr =
-      base::ThreadPool::CreateSingleThreadTaskRunner(
-          {content::BrowserThread::UI});
-#endif
-  ptr->PostTask(FROM_HERE, base::BindOnce(&FaviconDatabasePrivate::performSync,
-                                          d->weakPtrFactory.GetWeakPtr()));
+  d->task_runner()->PostTask(
+      FROM_HERE, base::BindOnce(&FaviconDatabasePrivate::performSync,
+                                d->weakPtrFactory.GetWeakPtr()));
 }
 
 void FaviconDatabase::ScheduleSync() {
index 55d72c5..3c7faf1 100644 (file)
@@ -3,10 +3,14 @@
 // found in the LICENSE file.
 
 #include "favicon_database_p.h"
+
 #include <iostream>
+
+#include "base/logging.h"
+#include "base/path_service.h"
 #include "base/task/bind_post_task.h"
 #include "base/task/thread_pool.h"
-#include "content/public/browser/browser_task_traits.h"
+#include "content/common/paths_efl.h"
 #include "favicon_commands.h"
 
 const char * const FaviconDatabasePrivate::pageUrlToFaviconUrlTable = "url_to_favicon_url";
@@ -18,11 +22,17 @@ const char * const FaviconDatabasePrivate::defaultDirSuffix = ".config/chromium-
 const char * const FaviconDatabasePrivate::defaultFilename = "WebpageIcons.db";
 
 FaviconDatabasePrivate::FaviconDatabasePrivate()
-    : path(ewk_home_directory_get()),
+    : task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
+          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+           base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
       privateBrowsing(false),
       sqlite(0),
       weakPtrFactory(this) {
-  path.Append(defaultDirSuffix).Append(defaultFilename);
+  base::FilePath db_path;
+  if (base::PathService::Get(PathsEfl::WEB_DATABASE_DIR, &db_path))
+    path = db_path.Append(FILE_PATH_LITERAL(defaultFilename));
+  else
+    LOG(ERROR) << "[favicon] Could not get web database directory";
 }
 
 GURL FaviconDatabasePrivate::faviconUrlForPageUrl(const GURL &pageUrl) const {
@@ -47,24 +57,14 @@ bool FaviconDatabasePrivate::existsForFaviconURL(const GURL &faviconUrl) const {
   return it != faviconUrlToBitmap.end();
 }
 
-scoped_refptr<base::SingleThreadTaskRunner> FaviconDatabasePrivate::taskRunner() const {
-#if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
-  return content::BrowserThread::GetTaskRunnerForThread(
-      content::BrowserThread::DB);
-#else
-  return base::ThreadPool::CreateSingleThreadTaskRunner(
-      {content::BrowserThread::UI});
-#endif
-}
-
 void FaviconDatabasePrivate::performSync() {
-  std::cerr << "[FaviconDatabasePrivate::performSync()]" << std::endl;
   base::AutoLock locker(mutex);
   timer.Stop();
   while (!commands.empty()) {
     Command *cmd = commands.front();
     if (!cmd->sqlExecute()) {
-      std::cerr << "[FaviconDatabasePrivate::performSync] :: " << "Error while executing command:\n\t" << cmd->lastError() << std::endl;
+      LOG(ERROR) << "[FaviconDatabasePrivate::performSync] :: "
+                 << "Error while executing command: " << cmd->lastError();
       // abort or what?
     }
     commands.pop();
index a9dd774..01c2de4 100644 (file)
@@ -10,7 +10,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 #include "base/synchronization/lock.h"
-#include "base/task/single_thread_task_runner.h"
+#include "base/task/sequenced_task_runner.h"
 #include "base/timer/timer.h"
 #include "content/public/browser/browser_thread.h"
 #include "favicon_database.h"
@@ -29,12 +29,16 @@ struct FaviconDatabasePrivate : public base::RefCountedThreadSafe<FaviconDatabas
 
   bool existsForFaviconURL(const GURL &faviconUrl) const;
 
-  scoped_refptr<base::SingleThreadTaskRunner> taskRunner() const;
+  scoped_refptr<base::SequencedTaskRunner> task_runner() const {
+    return task_runner_;
+  }
+
   void performSync();
 
   std::map<GURL, GURL> pageToFaviconUrl;
   std::map<GURL, SkBitmap> faviconUrlToBitmap;
   base::FilePath path;
+  scoped_refptr<base::SequencedTaskRunner> task_runner_;
   bool privateBrowsing;
 
   sqlite3 *sqlite;
diff --git a/tizen_src/ewk/efl_integration/common/skia_bitmap_utils.cc b/tizen_src/ewk/efl_integration/common/skia_bitmap_utils.cc
new file mode 100644 (file)
index 0000000..11b33bf
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright 2018 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "skia_bitmap_utils.h"
+
+namespace skia_bitmap_utils {
+
+bool CopyPixels(void* dst_addr, const void* src_addr, const SkImageInfo& info) {
+  if (!dst_addr || !src_addr)
+    return false;
+
+  size_t row_bytes = info.bytesPerPixel() * info.width();
+  for (int y = 0; y < info.height(); ++y) {
+    memcpy(dst_addr, src_addr, row_bytes);
+    src_addr = static_cast<const char*>(src_addr) + row_bytes;
+    dst_addr = static_cast<char*>(dst_addr) + row_bytes;
+  }
+
+  return true;
+}
+
+}  // namespace skia_bitmap_utils
diff --git a/tizen_src/ewk/efl_integration/common/skia_bitmap_utils.h b/tizen_src/ewk/efl_integration/common/skia_bitmap_utils.h
new file mode 100644 (file)
index 0000000..08bd3fb
--- /dev/null
@@ -0,0 +1,16 @@
+// Copyright 2018 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef TIZEN_SRC_EWK_EFL_INTEGRATION_COMMON_SKIA_BITMAP_UTILS_H
+#define TIZEN_SRC_EWK_EFL_INTEGRATION_COMMON_SKIA_BITMAP_UTILS_H
+
+#include "third_party/skia/include/core/SkBitmap.h"
+
+namespace skia_bitmap_utils {
+
+bool CopyPixels(void* dst_addr, const void* src_addr, const SkImageInfo& info);
+
+}  // namespace skia_bitmap_utils
+
+#endif  // TIZEN_SRC_EWK_EFL_INTEGRATION_COMMON_SKIA_BITMAP_UTILS_H
index fca6eeb..8951e30 100644 (file)
@@ -717,14 +717,7 @@ Evas_Object* EWebContext::AddFaviconObject(const char* uri,
   evas_object_image_fill_set(favicon, 0, 0, bitmap.width(), bitmap.height());
   evas_object_image_filled_set(favicon, EINA_TRUE);
   evas_object_image_alpha_set(favicon, EINA_TRUE);
-
-#if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
-  void* pixels = evas_object_image_data_get(favicon, EINA_TRUE);
-  if (pixels) {
-    bitmap.copyPixelsTo(pixels, bitmap.getSize());
-    evas_object_image_data_set(favicon, pixels);
-  }
-#endif
+  evas_object_image_data_copy_set(favicon, bitmap.getPixels());
 
   return favicon;
 }
index 1378ac6..cf3aec0 100644 (file)
@@ -46,14 +46,7 @@ Evas_Object* Ewk_Notification::GetIcon(Evas* evas) const {
   evas_object_image_size_set(icon, icon_.width(), icon_.height());
   evas_object_image_colorspace_set(icon, EVAS_COLORSPACE_ARGB8888);
   evas_object_image_alpha_set(icon, EINA_TRUE);
-  void* pixels = evas_object_image_data_get(icon, EINA_TRUE);
-
-#if !defined(EWK_BRINGUP)  // FIXME: m67 bringup
-  if (pixels) {
-    icon_.copyPixelsTo(pixels, icon_.getSize());
-    evas_object_image_data_set(icon, pixels);
-  }
-#endif
+  evas_object_image_data_copy_set(icon, icon_.getPixels());
 
   return icon;
 }
index 8fa3ea0..3e3d06f 100644 (file)
@@ -627,8 +627,8 @@ Eina_Bool ewk_context_favicon_database_directory_set(Ewk_Context* ewkContext, co
   EINA_SAFETY_ON_NULL_RETURN_VAL(ewkContext, EINA_FALSE);
   EINA_SAFETY_ON_NULL_RETURN_VAL(directoryPath, EINA_FALSE);
   base::FilePath path(directoryPath);
-  path.Append(FaviconDatabasePrivate::defaultFilename);
-  return ewkContext->SetFaviconDatabasePath(path) ? EINA_TRUE : EINA_FALSE;
+  path = path.Append(FaviconDatabasePrivate::defaultFilename);
+  return ewkContext->SetFaviconDatabasePath(path);
 }
 
 void ewk_context_preferred_languages_set(Eina_List* languages)
index 097edfe..2d6149d 100644 (file)
@@ -401,31 +401,6 @@ void WebContentsDelegateEfl::DidFinishLoad(RenderFrameHost* render_frame_host,
     return;
   web_view_->SmartCallback<EWebViewCallbacks::LoadFinished>().call();
 
-  NavigationEntry* entry = web_contents().GetController().GetVisibleEntry();
-  if (!entry)
-    return;
-
-  FaviconStatus& favicon = entry->GetFavicon();
-
-  if (favicon.valid) {
-    // check/update the url and favicon url in favicon database
-    FaviconDatabase::Instance()->SetFaviconURLForPageURL(favicon.url,
-                                                         validated_url);
-
-    // download favicon if there is no such in database
-    if (!FaviconDatabase::Instance()->ExistsForFaviconURL(favicon.url)) {
-      LOG(ERROR) << "[DidFinishLoad] :: no favicon in database for URL: "
-                 << favicon.url.spec();
-      favicon_downloader_.reset(new FaviconDownloader(
-          &web_contents_, favicon.url,
-          base::BindOnce(&WebContentsDelegateEfl::DidDownloadFavicon,
-                         weak_ptr_factory_.GetWeakPtr())));
-      favicon_downloader_->Start();
-    } else {
-      web_view_->SmartCallback<EWebViewCallbacks::IconReceived>().call();
-    }
-  }
-
   web_contents_.Focus();
 }
 
@@ -444,13 +419,33 @@ void WebContentsDelegateEfl::DidUpdateFaviconURL(
     const std::vector<blink::mojom::FaviconURLPtr>& candidates) {
   // select and set proper favicon
   for (const auto& favicon : candidates) {
-    if (favicon->icon_type == blink::mojom::FaviconIconType::kFavicon &&
-        !favicon->icon_url.is_valid()) {
+    if (!favicon->icon_url.is_valid())
+      continue;
+
+    if (favicon->icon_type == blink::mojom::FaviconIconType::kFavicon) {
       NavigationEntry* entry = web_contents_.GetController().GetVisibleEntry();
       if (!entry)
         return;
       entry->GetFavicon().url = favicon->icon_url;
       entry->GetFavicon().valid = true;
+
+      // check/update the url and favicon url in favicon database
+      FaviconDatabase::Instance()->SetFaviconURLForPageURL(favicon->icon_url,
+                                                           entry->GetURL());
+
+      // download favicon if there is no such in database
+      if (!FaviconDatabase::Instance()->ExistsForFaviconURL(
+              favicon->icon_url)) {
+        LOG(INFO) << "No favicon in database for URL: "
+                  << favicon->icon_url.spec();
+        favicon_downloader_.reset(new FaviconDownloader(
+            &web_contents_, favicon->icon_url,
+            base::BindOnce(&WebContentsDelegateEfl::DidDownloadFavicon,
+                           weak_ptr_factory_.GetWeakPtr())));
+        favicon_downloader_->Start();
+      } else {
+        web_view_->SmartCallback<EWebViewCallbacks::IconReceived>().call();
+      }
       return;
     }
   }