1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "components/bookmarks/browser/bookmark_node_data.h" 6 7 #include "base/logging.h" 8 #include "base/pickle.h" 9 #include "base/strings/utf_string_conversions.h" 10 #include "ui/base/clipboard/clipboard.h" 11 12 namespace bookmarks { 13 14 namespace { 15 16 const char kJavaScriptScheme[] = "javascript"; 17 18 } // namespace 19 20 // static 21 const ui::OSExchangeData::CustomFormat& 22 BookmarkNodeData::GetBookmarkCustomFormat() { 23 CR_DEFINE_STATIC_LOCAL( 24 ui::OSExchangeData::CustomFormat, 25 format, 26 (ui::Clipboard::GetFormatType(BookmarkNodeData::kClipboardFormatString))); 27 28 return format; 29 } 30 31 void BookmarkNodeData::Write(const base::FilePath& profile_path, 32 ui::OSExchangeData* data) const { 33 DCHECK(data); 34 35 // If there is only one element and it is a URL, write the URL to the 36 // clipboard. 37 if (elements.size() == 1 && elements[0].is_url) { 38 if (elements[0].url.SchemeIs(kJavaScriptScheme)) { 39 data->SetString(base::UTF8ToUTF16(elements[0].url.spec())); 40 } else { 41 data->SetURL(elements[0].url, elements[0].title); 42 } 43 } 44 45 Pickle data_pickle; 46 WriteToPickle(profile_path, &data_pickle); 47 48 data->SetPickledData(GetBookmarkCustomFormat(), data_pickle); 49 } 50 51 bool BookmarkNodeData::Read(const ui::OSExchangeData& data) { 52 elements.clear(); 53 54 profile_path_.clear(); 55 56 if (data.HasCustomFormat(GetBookmarkCustomFormat())) { 57 Pickle drag_data_pickle; 58 if (data.GetPickledData(GetBookmarkCustomFormat(), &drag_data_pickle)) { 59 if (!ReadFromPickle(&drag_data_pickle)) 60 return false; 61 } 62 } else { 63 // See if there is a URL on the clipboard. 64 Element element; 65 GURL url; 66 base::string16 title; 67 if (data.GetURLAndTitle( 68 ui::OSExchangeData::CONVERT_FILENAMES, &url, &title)) 69 ReadFromTuple(url, title); 70 } 71 72 return is_valid(); 73 } 74 75 } // namespace bookmarks 76