Commit 30ea9ef0 authored by thestig's avatar thestig Committed by Commit bot

Fix static initializers in ClipboardAura.

BUG=537099

Review-Url: https://codereview.chromium.org/2806013002
Cr-Commit-Position: refs/heads/master@{#464328}
parent 8196d431
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
namespace ui { namespace ui {
namespace { namespace {
const char kMimeTypeFilename[] = "chromium/filename"; const char kMimeTypeFilename[] = "chromium/filename";
const char kMimeTypeBitmap[] = "image/bmp"; const char kMimeTypeBitmap[] = "image/bmp";
const size_t kMaxClipboardSize = 1; const size_t kMaxClipboardSize = 1;
...@@ -298,10 +299,7 @@ class AuraClipboard { ...@@ -298,10 +299,7 @@ class AuraClipboard {
// True if the data on top of the clipboard stack has format |format|. // True if the data on top of the clipboard stack has format |format|.
bool HasFormat(AuraClipboardFormat format) const { bool HasFormat(AuraClipboardFormat format) const {
const ClipboardData* data = GetData(); const ClipboardData* data = GetData();
if (!data) return data ? data->format() & format : false;
return false;
return data->format() & format;
} }
void AddToListEnsuringSize(std::unique_ptr<ClipboardData> data) { void AddToListEnsuringSize(std::unique_ptr<ClipboardData> data) {
...@@ -325,28 +323,24 @@ class AuraClipboard { ...@@ -325,28 +323,24 @@ class AuraClipboard {
DISALLOW_COPY_AND_ASSIGN(AuraClipboard); DISALLOW_COPY_AND_ASSIGN(AuraClipboard);
}; };
AuraClipboard* aura_clipboard = NULL; AuraClipboard* g_aura_clipboard = NULL;
AuraClipboard* GetClipboard() { AuraClipboard* GetClipboard() {
if (!aura_clipboard) if (!g_aura_clipboard)
aura_clipboard = new AuraClipboard(); g_aura_clipboard = new AuraClipboard();
return aura_clipboard; return g_aura_clipboard;
} }
void DeleteClipboard() { void DeleteClipboard() {
if (aura_clipboard) delete g_aura_clipboard;
delete aura_clipboard; g_aura_clipboard = NULL;
aura_clipboard = NULL;
} }
// Helper class to build a ClipboardData object and write it to clipboard. // Helper class to build a ClipboardData object and write it to clipboard.
class ClipboardDataBuilder { class ClipboardDataBuilder {
public: public:
static void CommitToClipboard() { static void CommitToClipboard() {
// Make sure there is always a valid ClipboardData object attached to GetClipboard()->WriteData(TakeCurrentData());
// current_data_.
GetCurrentData();
GetClipboard()->WriteData(std::move(current_data_));
} }
static void WriteText(const char* text_data, size_t text_len) { static void WriteText(const char* text_data, size_t text_len) {
...@@ -397,14 +391,21 @@ class ClipboardDataBuilder { ...@@ -397,14 +391,21 @@ class ClipboardDataBuilder {
private: private:
static ClipboardData* GetCurrentData() { static ClipboardData* GetCurrentData() {
if (!current_data_) if (!current_data_)
current_data_.reset(new ClipboardData); current_data_ = new ClipboardData;
return current_data_.get(); 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 } // namespace
...@@ -551,20 +552,16 @@ bool ClipboardAura::IsFormatAvailable(const FormatType& format, ...@@ -551,20 +552,16 @@ bool ClipboardAura::IsFormatAvailable(const FormatType& format,
if (GetPlainTextFormatType().Equals(format) || if (GetPlainTextFormatType().Equals(format) ||
GetUrlFormatType().Equals(format)) GetUrlFormatType().Equals(format))
return clipboard->IsFormatAvailable(TEXT); return clipboard->IsFormatAvailable(TEXT);
else if (GetHtmlFormatType().Equals(format)) if (GetHtmlFormatType().Equals(format))
return clipboard->IsFormatAvailable(HTML); return clipboard->IsFormatAvailable(HTML);
else if (GetRtfFormatType().Equals(format)) if (GetRtfFormatType().Equals(format))
return clipboard->IsFormatAvailable(RTF); return clipboard->IsFormatAvailable(RTF);
else if (GetBitmapFormatType().Equals(format)) if (GetBitmapFormatType().Equals(format))
return clipboard->IsFormatAvailable(BITMAP); return clipboard->IsFormatAvailable(BITMAP);
else if (GetWebKitSmartPasteFormatType().Equals(format)) if (GetWebKitSmartPasteFormatType().Equals(format))
return clipboard->IsFormatAvailable(WEB); return clipboard->IsFormatAvailable(WEB);
else { const ClipboardData* data = clipboard->GetData();
const ClipboardData* data = clipboard->GetData(); return data && data->custom_data_format() == format.ToString();
if (data && data->custom_data_format() == format.ToString())
return true;
}
return false;
} }
void ClipboardAura::Clear(ClipboardType type) { void ClipboardAura::Clear(ClipboardType type) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment