Index: ui/base/clipboard/clipboard_aura.cc |
diff --git a/ui/base/clipboard/clipboard_aura.cc b/ui/base/clipboard/clipboard_aura.cc |
index 25987ee4ffa47babc5c7b3404bc7f9ee763f48d5..7c02bcba45221dbb94b02f98e4055fcddb00383f 100644 |
--- a/ui/base/clipboard/clipboard_aura.cc |
+++ b/ui/base/clipboard/clipboard_aura.cc |
@@ -24,6 +24,7 @@ |
namespace ui { |
namespace { |
+ |
const char kMimeTypeFilename[] = "chromium/filename"; |
const char kMimeTypeBitmap[] = "image/bmp"; |
const size_t kMaxClipboardSize = 1; |
@@ -298,10 +299,7 @@ class AuraClipboard { |
// True if the data on top of the clipboard stack has format |format|. |
bool HasFormat(AuraClipboardFormat format) const { |
const ClipboardData* data = GetData(); |
- if (!data) |
- return false; |
- |
- return data->format() & format; |
+ return data ? data->format() & format : false; |
} |
void AddToListEnsuringSize(std::unique_ptr<ClipboardData> data) { |
@@ -325,28 +323,24 @@ class AuraClipboard { |
DISALLOW_COPY_AND_ASSIGN(AuraClipboard); |
}; |
-AuraClipboard* aura_clipboard = NULL; |
+AuraClipboard* g_aura_clipboard = NULL; |
AuraClipboard* GetClipboard() { |
- if (!aura_clipboard) |
- aura_clipboard = new AuraClipboard(); |
- return aura_clipboard; |
+ if (!g_aura_clipboard) |
+ g_aura_clipboard = new AuraClipboard(); |
+ return g_aura_clipboard; |
} |
void DeleteClipboard() { |
- if (aura_clipboard) |
- delete aura_clipboard; |
- aura_clipboard = NULL; |
+ delete g_aura_clipboard; |
+ g_aura_clipboard = NULL; |
} |
// Helper class to build a ClipboardData object and write it to clipboard. |
class ClipboardDataBuilder { |
public: |
static void CommitToClipboard() { |
- // Make sure there is always a valid ClipboardData object attached to |
- // current_data_. |
- GetCurrentData(); |
- GetClipboard()->WriteData(std::move(current_data_)); |
+ GetClipboard()->WriteData(TakeCurrentData()); |
} |
static void WriteText(const char* text_data, size_t text_len) { |
@@ -397,14 +391,21 @@ class ClipboardDataBuilder { |
private: |
static ClipboardData* GetCurrentData() { |
if (!current_data_) |
- current_data_.reset(new ClipboardData); |
- return current_data_.get(); |
+ current_data_ = new ClipboardData; |
+ return current_data_; |
} |
- static std::unique_ptr<ClipboardData> current_data_; |
+ static std::unique_ptr<ClipboardData> TakeCurrentData() { |
+ std::unique_ptr<ClipboardData> data = base::WrapUnique(GetCurrentData()); |
+ current_data_ = nullptr; |
+ return data; |
+ } |
+ // This is a raw pointer instead of a std::unique_ptr to avoid adding a |
+ // static initializer. |
+ static ClipboardData* current_data_; |
}; |
-std::unique_ptr<ClipboardData> ClipboardDataBuilder::current_data_; |
+ClipboardData* ClipboardDataBuilder::current_data_ = nullptr; |
} // namespace |
@@ -551,20 +552,16 @@ bool ClipboardAura::IsFormatAvailable(const FormatType& format, |
if (GetPlainTextFormatType().Equals(format) || |
GetUrlFormatType().Equals(format)) |
return clipboard->IsFormatAvailable(TEXT); |
- else if (GetHtmlFormatType().Equals(format)) |
+ if (GetHtmlFormatType().Equals(format)) |
return clipboard->IsFormatAvailable(HTML); |
- else if (GetRtfFormatType().Equals(format)) |
+ if (GetRtfFormatType().Equals(format)) |
return clipboard->IsFormatAvailable(RTF); |
- else if (GetBitmapFormatType().Equals(format)) |
+ if (GetBitmapFormatType().Equals(format)) |
return clipboard->IsFormatAvailable(BITMAP); |
- else if (GetWebKitSmartPasteFormatType().Equals(format)) |
+ if (GetWebKitSmartPasteFormatType().Equals(format)) |
return clipboard->IsFormatAvailable(WEB); |
- else { |
- const ClipboardData* data = clipboard->GetData(); |
- if (data && data->custom_data_format() == format.ToString()) |
- return true; |
- } |
- return false; |
+ const ClipboardData* data = clipboard->GetData(); |
+ return data && data->custom_data_format() == format.ToString(); |
} |
void ClipboardAura::Clear(ClipboardType type) { |