[Multi Control] Support copy & paste multi type image file 84/313884/4
authorchenshurong <shurong.chen@samsung.com>
Wed, 3 Jul 2024 06:32:25 +0000 (14:32 +0800)
committerBot Blink <blinkbot@samsung.com>
Thu, 11 Jul 2024 08:40:46 +0000 (08:40 +0000)
Add image type when convert local images to base64 encoded data URI,
for supporting some website need check the image type, such as Gmail.

Change-Id: Ib7073ded398aac2bd72be61d442de584302f4e27
Signed-off-by: chenshurong <shurong.chen@samsung.com>
tizen_src/chromium_impl/ui/base/clipboard/clipboard_helper_efl_wayland.cc
tizen_src/chromium_impl/ui/base/clipboard/clipboard_helper_efl_wayland.h

index 704a8048ff02aa5ee3719ee1972b1225f44ffe70..b4158bef19291314ee4dab093f735f790e518ef9 100644 (file)
@@ -23,7 +23,8 @@ const std::string kHTMLImageFromClipboardAppFront("<img src=\"file://");
 const std::string::size_type kHTMLImageFromClipboardAppFrontLength =
     kHTMLImageFromClipboardAppFront.length();
 const std::string kHTMLImageFromClipboardAppEnd("\">");
-const std::string kDataURIImagePrefix("<img alt=\"\" src=\"data:image;base64,");
+const std::string kDataURIImagePrefix("<img alt=\"\" src=\"data:image");
+const std::string kDataURIImageBase64(";base64,");
 const std::string kDataURIImageSuffix("\">");
 static bool g_eldbus_initialized = false;
 }  // namespace
@@ -146,6 +147,19 @@ void ClipboardHelperEfl::Clear() {
                         ELM_SEL_FORMAT_TEXT, nullptr, 0);
 }
 
+std::string ClipboardHelperEfl::GetImageTypeFromPath(const std::string& path) {
+  std::string::size_type len = path.length();
+  std::string::size_type back_pos = path.rfind(".");
+  if (back_pos == std::string::npos) {
+    LOG(WARNING) << "[CLIPBOARD] couldn't find image type";
+    return std::string();
+  }
+
+  std::string image_type = path.substr(back_pos + 1, len);
+  LOG(INFO) << "[CLIPBOARD] image type: " << image_type;
+  return image_type;
+}
+
 bool ClipboardHelperEfl::Base64ImageTagFromImagePath(const std::string& path,
                                                      std::string* image_html) {
   std::string file_contents;
@@ -155,8 +169,14 @@ bool ClipboardHelperEfl::Base64ImageTagFromImagePath(const std::string& path,
   }
 
   base::Base64Encode(file_contents, &file_contents);
-
-  *image_html = kDataURIImagePrefix;
+  std::string image_Prefix;
+  std::string image_type = GetImageTypeFromPath(path);
+  if (!image_type.empty())
+    image_Prefix = kDataURIImagePrefix + "/" + image_type + kDataURIImageBase64;
+  else
+    image_Prefix = kDataURIImagePrefix + kDataURIImageBase64;
+
+  *image_html = image_Prefix;
   *image_html += file_contents;
   *image_html += kDataURIImageSuffix;
   return true;
@@ -187,6 +207,7 @@ bool ClipboardHelperEfl::ConvertImgTagToBase64(const std::string& tag,
   }
 
   std::string image_path = front_stripped.substr(0, back_pos);
+  LOG(INFO) << "[CLIPBOARD] image_path:" << image_path;
   return Base64ImageTagFromImagePath(image_path, out_tag);
 }
 
@@ -314,6 +335,8 @@ Eina_Bool ClipboardHelperEfl::SelectionGetCbHTML(void* data,
   std::string img_tag;
   if (ConvertImgTagToBase64(selection_data, &img_tag)) {
     self->clipboard_contents_html_ = img_tag;
+    LOG(INFO) << "[CLIPBOARD] image type, set clipboard_contents_html_ : "
+              << self->clipboard_contents_html_;
   } else {
     self->clipboard_contents_html_ = selection_data;
 #if BUILDFLAG(IS_TIZEN_TV)
index a50a74ce1caf988fb2b5fe895cab184c4cce317e..68f77d44cbcefab699ee021e6f4a3793dca1f118 100644 (file)
@@ -79,6 +79,7 @@ class COMPONENT_EXPORT(UI_BASE) ClipboardHelperEfl {
   static Eina_Bool SelectionGetCbAppText(void* data,
                                          Evas_Object* obj,
                                          Elm_Selection_Data* ev);
+  static std::string GetImageTypeFromPath(const std::string& path);
 
   static bool Base64ImageTagFromImagePath(const std::string& path,
                                           std::string* image_html);