Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(208)

Side by Side Diff: app/os_exchange_data_provider_win.cc

Issue 2253001: Revert 48186, 48196, 48198 (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | app/win/window_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "app/os_exchange_data_provider_win.h" 5 #include "app/os_exchange_data_provider_win.h"
6 6
7 #include "app/clipboard/clipboard_util_win.h" 7 #include "app/clipboard/clipboard_util_win.h"
8 #include "app/l10n_util.h" 8 #include "app/l10n_util.h"
9 #include "base/file_path.h" 9 #include "base/file_path.h"
10 #include "base/i18n/file_util_icu.h" 10 #include "base/i18n/file_util_icu.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 static FormatEtcEnumerator* CloneFromOther(const FormatEtcEnumerator* other); 77 static FormatEtcEnumerator* CloneFromOther(const FormatEtcEnumerator* other);
78 78
79 private: 79 private:
80 // We are _forced_ to use a vector as our internal data model as Windows' 80 // We are _forced_ to use a vector as our internal data model as Windows'
81 // retarded IEnumFORMATETC API assumes a deterministic ordering of elements 81 // retarded IEnumFORMATETC API assumes a deterministic ordering of elements
82 // through methods like Next and Skip. This exposes the underlying data 82 // through methods like Next and Skip. This exposes the underlying data
83 // structure to the user. Bah. 83 // structure to the user. Bah.
84 std::vector<FORMATETC*> contents_; 84 std::vector<FORMATETC*> contents_;
85 85
86 // The cursor of the active enumeration - an index into |contents_|. 86 // The cursor of the active enumeration - an index into |contents_|.
87 size_t cursor_; 87 int cursor_;
88 88
89 LONG ref_count_; 89 LONG ref_count_;
90 90
91 DISALLOW_EVIL_CONSTRUCTORS(FormatEtcEnumerator); 91 DISALLOW_EVIL_CONSTRUCTORS(FormatEtcEnumerator);
92 }; 92 };
93 93
94 // Safely makes a copy of all of the relevant bits of a FORMATETC object. 94 // Safely makes a copy of all of the relevant bits of a FORMATETC object.
95 static void CloneFormatEtc(FORMATETC* source, FORMATETC* clone) { 95 static void CloneFormatEtc(FORMATETC* source, FORMATETC* clone) {
96 *clone = *source; 96 *clone = *source;
97 if (source->ptd) { 97 if (source->ptd) {
(...skipping 20 matching lines...) Expand all
118 STLDeleteContainerPointers(contents_.begin(), contents_.end()); 118 STLDeleteContainerPointers(contents_.begin(), contents_.end());
119 } 119 }
120 120
121 STDMETHODIMP FormatEtcEnumerator::Next( 121 STDMETHODIMP FormatEtcEnumerator::Next(
122 ULONG count, FORMATETC* elements_array, ULONG* elements_fetched) { 122 ULONG count, FORMATETC* elements_array, ULONG* elements_fetched) {
123 // MSDN says |elements_fetched| is allowed to be NULL if count is 1. 123 // MSDN says |elements_fetched| is allowed to be NULL if count is 1.
124 if (!elements_fetched) 124 if (!elements_fetched)
125 DCHECK(count == 1); 125 DCHECK(count == 1);
126 126
127 // This method copies count elements into |elements_array|. 127 // This method copies count elements into |elements_array|.
128 ULONG index = 0; 128 int index = 0;
129 while (cursor_ < contents_.size() && index < count) { 129 while (cursor_ < static_cast<int>(contents_.size()) &&
130 static_cast<ULONG>(index) < count) {
130 CloneFormatEtc(contents_.at(cursor_), &elements_array[index]); 131 CloneFormatEtc(contents_.at(cursor_), &elements_array[index]);
131 ++cursor_; 132 ++cursor_;
132 ++index; 133 ++index;
133 } 134 }
134 // The out param is for how many we actually copied. 135 // The out param is for how many we actually copied.
135 if (elements_fetched) 136 if (elements_fetched)
136 *elements_fetched = index; 137 *elements_fetched = index;
137 138
138 // If the two don't agree, then we fail. 139 // If the two don't agree, then we fail.
139 return index == count ? S_OK : S_FALSE; 140 return index == count ? S_OK : S_FALSE;
140 } 141 }
141 142
142 STDMETHODIMP FormatEtcEnumerator::Skip(ULONG skip_count) { 143 STDMETHODIMP FormatEtcEnumerator::Skip(ULONG skip_count) {
143 cursor_ += skip_count; 144 cursor_ += skip_count;
144 // MSDN implies it's OK to leave the enumerator trashed. 145 // MSDN implies it's OK to leave the enumerator trashed.
145 // "Whatever you say, boss" 146 // "Whatever you say, boss"
146 return cursor_ <= contents_.size() ? S_OK : S_FALSE; 147 return cursor_ <= static_cast<int>(contents_.size()) ? S_OK : S_FALSE;
147 } 148 }
148 149
149 STDMETHODIMP FormatEtcEnumerator::Reset() { 150 STDMETHODIMP FormatEtcEnumerator::Reset() {
150 cursor_ = 0; 151 cursor_ = 0;
151 return S_OK; 152 return S_OK;
152 } 153 }
153 154
154 STDMETHODIMP FormatEtcEnumerator::Clone(IEnumFORMATETC** clone) { 155 STDMETHODIMP FormatEtcEnumerator::Clone(IEnumFORMATETC** clone) {
155 // Clone the current enumerator in its exact state, including cursor. 156 // Clone the current enumerator in its exact state, including cursor.
156 FormatEtcEnumerator* e = CloneFromOther(this); 157 FormatEtcEnumerator* e = CloneFromOther(this);
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after
910 // static 911 // static
911 OSExchangeData::Provider* OSExchangeData::CreateProvider() { 912 OSExchangeData::Provider* OSExchangeData::CreateProvider() {
912 return new OSExchangeDataProviderWin(); 913 return new OSExchangeDataProviderWin();
913 } 914 }
914 915
915 // static 916 // static
916 OSExchangeData::CustomFormat OSExchangeData::RegisterCustomFormat( 917 OSExchangeData::CustomFormat OSExchangeData::RegisterCustomFormat(
917 const std::string& type) { 918 const std::string& type) {
918 return RegisterClipboardFormat(ASCIIToWide(type).c_str()); 919 return RegisterClipboardFormat(ASCIIToWide(type).c_str());
919 } 920 }
OLDNEW
« no previous file with comments | « no previous file | app/win/window_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698