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

Side by Side Diff: chrome/browser/spellchecker/feedback.cc

Issue 15318004: Store feedback for spellcheck results from spelling service (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix mac unit test compile Created 7 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "chrome/browser/spellchecker/feedback.h" 5 #include "chrome/browser/spellchecker/feedback.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 #include <set>
10 9
11 namespace spellcheck { 10 namespace spellcheck {
12 11
12 namespace {
13
14 typedef std::set<uint32> HashCollection;
palmer 2013/05/21 23:06:28 Would it make sense to use these typedefs in feedb
please use gerrit instead 2013/05/21 23:09:08 Sure, why not.
15 typedef std::map<int, HashCollection> RendererHashesMap;
16 typedef std::map<uint32, Misspelling> HashMisspellingMap;
17
18 } // namespace
19
13 Feedback::Feedback() { 20 Feedback::Feedback() {
14 } 21 }
15 22
16 Feedback::~Feedback() { 23 Feedback::~Feedback() {
17 } 24 }
18 25
19 Misspelling* Feedback::GetMisspelling(uint32 hash) { 26 Misspelling* Feedback::GetMisspelling(uint32 hash) {
20 std::map<uint32, Misspelling>::iterator it = misspellings_.find(hash); 27 HashMisspellingMap::iterator it = misspellings_.find(hash);
21 if (it == misspellings_.end()) 28 if (it == misspellings_.end())
22 return NULL; 29 return NULL;
23 return &it->second; 30 return &it->second;
24 } 31 }
25 32
26 void Feedback::FinalizeRemovedMisspellings( 33 void Feedback::FinalizeRemovedMisspellings(
27 int renderer_process_id, 34 int renderer_process_id,
28 const std::vector<uint32>& remaining_markers) { 35 const std::vector<uint32>& remaining_markers) {
29 std::map<int, std::vector<uint32> >::iterator i = 36 RendererHashesMap::iterator i = hashes_.find(renderer_process_id);
30 hashes_.find(renderer_process_id);
31 if (i == hashes_.end() || i->second.empty()) 37 if (i == hashes_.end() || i->second.empty())
32 return; 38 return;
33 std::vector<uint32> remaining_copy(remaining_markers); 39 std::set<uint32> remaining_set(remaining_markers.begin(),
34 std::sort(remaining_copy.begin(), remaining_copy.end()); 40 remaining_markers.end());
35 std::sort(i->second.begin(), i->second.end());
36 std::vector<uint32> removed_markers; 41 std::vector<uint32> removed_markers;
37 std::set_difference(i->second.begin(), 42 std::set_difference(i->second.begin(),
38 i->second.end(), 43 i->second.end(),
39 remaining_copy.begin(), 44 remaining_set.begin(),
40 remaining_copy.end(), 45 remaining_set.end(),
41 std::back_inserter(removed_markers)); 46 std::back_inserter(removed_markers));
42 for (std::vector<uint32>::const_iterator j = removed_markers.begin(); 47 for (std::vector<uint32>::const_iterator j = removed_markers.begin();
43 j != removed_markers.end(); 48 j != removed_markers.end();
44 ++j) { 49 ++j) {
45 std::map<uint32, Misspelling>::iterator k = misspellings_.find(*j); 50 HashMisspellingMap::iterator k = misspellings_.find(*j);
46 if (k != misspellings_.end() && !k->second.action.IsFinal()) 51 if (k != misspellings_.end() && !k->second.action.IsFinal())
47 k->second.action.Finalize(); 52 k->second.action.Finalize();
48 } 53 }
49 } 54 }
50 55
51 bool Feedback::RendererHasMisspellings(int renderer_process_id) const { 56 bool Feedback::RendererHasMisspellings(int renderer_process_id) const {
52 std::map<int, std::vector<uint32> >::const_iterator it = 57 RendererHashesMap::const_iterator it = hashes_.find(renderer_process_id);
53 hashes_.find(renderer_process_id);
54 return it != hashes_.end() && !it->second.empty(); 58 return it != hashes_.end() && !it->second.empty();
55 } 59 }
56 60
57 std::vector<Misspelling> Feedback::GetMisspellingsInRenderer( 61 std::vector<Misspelling> Feedback::GetMisspellingsInRenderer(
58 int renderer_process_id) const { 62 int renderer_process_id) const {
59 std::vector<Misspelling> result; 63 std::vector<Misspelling> result;
60 std::map<int, std::vector<uint32> >::const_iterator i = 64 RendererHashesMap::const_iterator i = hashes_.find(renderer_process_id);
61 hashes_.find(renderer_process_id);
62 if (i == hashes_.end() || i->second.empty()) 65 if (i == hashes_.end() || i->second.empty())
63 return result; 66 return result;
64 for (std::vector<uint32>::const_iterator j = i->second.begin(); 67 for (HashCollection::const_iterator j = i->second.begin();
65 j != i->second.end(); 68 j != i->second.end();
66 ++j) { 69 ++j) {
67 std::map<uint32, Misspelling>::const_iterator k = misspellings_.find(*j); 70 HashMisspellingMap::const_iterator k = misspellings_.find(*j);
68 if (k != misspellings_.end()) 71 if (k != misspellings_.end())
69 result.push_back(k->second); 72 result.push_back(k->second);
70 } 73 }
71 return result; 74 return result;
72 } 75 }
73 76
74 void Feedback::EraseFinalizedMisspellings(int renderer_process_id) { 77 void Feedback::EraseFinalizedMisspellings(int renderer_process_id) {
75 std::map<int, std::vector<uint32> >::iterator i = 78 RendererHashesMap::iterator i = hashes_.find(renderer_process_id);
76 hashes_.find(renderer_process_id);
77 if (i == hashes_.end() || i->second.empty()) 79 if (i == hashes_.end() || i->second.empty())
78 return; 80 return;
79 std::vector<uint32> pending; 81 HashCollection pending;
80 for (std::vector<uint32>::const_iterator j = i->second.begin(); 82 for (HashCollection::const_iterator j = i->second.begin();
81 j != i->second.end(); 83 j != i->second.end();
82 ++j) { 84 ++j) {
83 std::map<uint32, Misspelling>::iterator k = misspellings_.find(*j); 85 HashMisspellingMap::iterator k = misspellings_.find(*j);
84 if (k != misspellings_.end()) { 86 if (k != misspellings_.end()) {
85 if (k->second.action.IsFinal()) 87 if (k->second.action.IsFinal())
86 misspellings_.erase(k); 88 misspellings_.erase(k);
87 else 89 else
88 pending.push_back(*j); 90 pending.insert(*j);
89 } 91 }
90 } 92 }
91 i->second.swap(pending); 93 i->second.swap(pending);
92 } 94 }
93 95
94 bool Feedback::HasMisspelling(uint32 hash) const { 96 bool Feedback::HasMisspelling(uint32 hash) const {
95 return !!misspellings_.count(hash); 97 return !!misspellings_.count(hash);
96 } 98 }
97 99
98 void Feedback::AddMisspelling(int renderer_process_id, 100 void Feedback::AddMisspelling(int renderer_process_id,
99 const Misspelling& misspelling) { 101 const Misspelling& misspelling) {
100 misspellings_[misspelling.hash] = misspelling; 102 misspellings_[misspelling.hash] = misspelling;
101 hashes_[renderer_process_id].push_back(misspelling.hash); 103 hashes_[renderer_process_id].insert(misspelling.hash);
102 } 104 }
103 105
104 bool Feedback::Empty() const { 106 bool Feedback::Empty() const {
105 return misspellings_.empty(); 107 return misspellings_.empty();
106 } 108 }
107 109
108 std::vector<int> Feedback::GetRendersWithMisspellings() const { 110 std::vector<int> Feedback::GetRendersWithMisspellings() const {
109 std::vector<int> result; 111 std::vector<int> result;
110 for (std::map<int, std::vector<uint32> >::const_iterator it = hashes_.begin(); 112 for (RendererHashesMap::const_iterator it = hashes_.begin();
111 it != hashes_.end(); 113 it != hashes_.end();
112 ++it) { 114 ++it) {
113 if (!it->second.empty()) 115 if (!it->second.empty())
114 result.push_back(it->first); 116 result.push_back(it->first);
115 } 117 }
116 return result; 118 return result;
117 } 119 }
118 120
119 void Feedback::FinalizeAllMisspellings() { 121 void Feedback::FinalizeAllMisspellings() {
120 for (std::map<uint32, Misspelling>::iterator it = misspellings_.begin(); 122 for (HashMisspellingMap::iterator it = misspellings_.begin();
121 it != misspellings_.end(); 123 it != misspellings_.end();
122 ++it) { 124 ++it) {
123 if (!it->second.action.IsFinal()) 125 if (!it->second.action.IsFinal())
124 it->second.action.Finalize(); 126 it->second.action.Finalize();
125 } 127 }
126 } 128 }
127 129
128 std::vector<Misspelling> Feedback::GetAllMisspellings() const { 130 std::vector<Misspelling> Feedback::GetAllMisspellings() const {
129 std::vector<Misspelling> result; 131 std::vector<Misspelling> result;
130 for (std::map<uint32, Misspelling>::const_iterator it = misspellings_.begin(); 132 for (HashMisspellingMap::const_iterator it = misspellings_.begin();
131 it != misspellings_.end(); 133 it != misspellings_.end();
132 ++it) { 134 ++it) {
133 result.push_back(it->second); 135 result.push_back(it->second);
134 } 136 }
135 return result; 137 return result;
136 } 138 }
137 139
138 void Feedback::Clear() { 140 void Feedback::Clear() {
139 misspellings_.clear(); 141 misspellings_.clear();
140 hashes_.clear(); 142 hashes_.clear();
141 } 143 }
142 144
143 } // namespace spellcheck 145 } // namespace spellcheck
OLDNEW
« no previous file with comments | « chrome/browser/spellchecker/feedback.h ('k') | chrome/browser/spellchecker/feedback_sender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698