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

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: Address comments 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
13 Feedback::Feedback() { 12 Feedback::Feedback() {
14 } 13 }
15 14
16 Feedback::~Feedback() { 15 Feedback::~Feedback() {
17 } 16 }
18 17
19 Misspelling* Feedback::GetMisspelling(uint32 hash) { 18 Misspelling* Feedback::GetMisspelling(uint32 hash) {
20 std::map<uint32, Misspelling>::iterator it = misspellings_.find(hash); 19 HashMisspellingMap::iterator it = misspellings_.find(hash);
21 if (it == misspellings_.end()) 20 if (it == misspellings_.end())
22 return NULL; 21 return NULL;
23 return &it->second; 22 return &it->second;
24 } 23 }
25 24
26 void Feedback::FinalizeRemovedMisspellings( 25 void Feedback::FinalizeRemovedMisspellings(
27 int renderer_process_id, 26 int renderer_process_id,
28 const std::vector<uint32>& remaining_markers) { 27 const std::vector<uint32>& remaining_markers) {
29 std::map<int, std::vector<uint32> >::iterator i = 28 RendererHashesMap::iterator i = hashes_.find(renderer_process_id);
30 hashes_.find(renderer_process_id);
31 if (i == hashes_.end() || i->second.empty()) 29 if (i == hashes_.end() || i->second.empty())
32 return; 30 return;
33 std::vector<uint32> remaining_copy(remaining_markers); 31 HashCollection remaining_set(remaining_markers.begin(),
34 std::sort(remaining_copy.begin(), remaining_copy.end()); 32 remaining_markers.end());
35 std::sort(i->second.begin(), i->second.end());
36 std::vector<uint32> removed_markers; 33 std::vector<uint32> removed_markers;
37 std::set_difference(i->second.begin(), 34 std::set_difference(i->second.begin(),
38 i->second.end(), 35 i->second.end(),
39 remaining_copy.begin(), 36 remaining_set.begin(),
40 remaining_copy.end(), 37 remaining_set.end(),
41 std::back_inserter(removed_markers)); 38 std::back_inserter(removed_markers));
42 for (std::vector<uint32>::const_iterator j = removed_markers.begin(); 39 for (std::vector<uint32>::const_iterator j = removed_markers.begin();
43 j != removed_markers.end(); 40 j != removed_markers.end();
44 ++j) { 41 ++j) {
45 std::map<uint32, Misspelling>::iterator k = misspellings_.find(*j); 42 HashMisspellingMap::iterator k = misspellings_.find(*j);
46 if (k != misspellings_.end() && !k->second.action.IsFinal()) 43 if (k != misspellings_.end() && !k->second.action.IsFinal())
47 k->second.action.Finalize(); 44 k->second.action.Finalize();
48 } 45 }
49 } 46 }
50 47
51 bool Feedback::RendererHasMisspellings(int renderer_process_id) const { 48 bool Feedback::RendererHasMisspellings(int renderer_process_id) const {
52 std::map<int, std::vector<uint32> >::const_iterator it = 49 RendererHashesMap::const_iterator it = hashes_.find(renderer_process_id);
53 hashes_.find(renderer_process_id);
54 return it != hashes_.end() && !it->second.empty(); 50 return it != hashes_.end() && !it->second.empty();
55 } 51 }
56 52
57 std::vector<Misspelling> Feedback::GetMisspellingsInRenderer( 53 std::vector<Misspelling> Feedback::GetMisspellingsInRenderer(
58 int renderer_process_id) const { 54 int renderer_process_id) const {
59 std::vector<Misspelling> result; 55 std::vector<Misspelling> result;
60 std::map<int, std::vector<uint32> >::const_iterator i = 56 RendererHashesMap::const_iterator i = hashes_.find(renderer_process_id);
61 hashes_.find(renderer_process_id);
62 if (i == hashes_.end() || i->second.empty()) 57 if (i == hashes_.end() || i->second.empty())
63 return result; 58 return result;
64 for (std::vector<uint32>::const_iterator j = i->second.begin(); 59 for (HashCollection::const_iterator j = i->second.begin();
65 j != i->second.end(); 60 j != i->second.end();
66 ++j) { 61 ++j) {
67 std::map<uint32, Misspelling>::const_iterator k = misspellings_.find(*j); 62 HashMisspellingMap::const_iterator k = misspellings_.find(*j);
68 if (k != misspellings_.end()) 63 if (k != misspellings_.end())
69 result.push_back(k->second); 64 result.push_back(k->second);
70 } 65 }
71 return result; 66 return result;
72 } 67 }
73 68
74 void Feedback::EraseFinalizedMisspellings(int renderer_process_id) { 69 void Feedback::EraseFinalizedMisspellings(int renderer_process_id) {
75 std::map<int, std::vector<uint32> >::iterator i = 70 RendererHashesMap::iterator i = hashes_.find(renderer_process_id);
76 hashes_.find(renderer_process_id);
77 if (i == hashes_.end() || i->second.empty()) 71 if (i == hashes_.end() || i->second.empty())
78 return; 72 return;
79 std::vector<uint32> pending; 73 HashCollection pending;
80 for (std::vector<uint32>::const_iterator j = i->second.begin(); 74 for (HashCollection::const_iterator j = i->second.begin();
81 j != i->second.end(); 75 j != i->second.end();
82 ++j) { 76 ++j) {
83 std::map<uint32, Misspelling>::iterator k = misspellings_.find(*j); 77 HashMisspellingMap::iterator k = misspellings_.find(*j);
84 if (k != misspellings_.end()) { 78 if (k != misspellings_.end()) {
85 if (k->second.action.IsFinal()) 79 if (k->second.action.IsFinal())
86 misspellings_.erase(k); 80 misspellings_.erase(k);
87 else 81 else
88 pending.push_back(*j); 82 pending.insert(*j);
89 } 83 }
90 } 84 }
91 i->second.swap(pending); 85 i->second.swap(pending);
92 } 86 }
93 87
94 bool Feedback::HasMisspelling(uint32 hash) const { 88 bool Feedback::HasMisspelling(uint32 hash) const {
95 return !!misspellings_.count(hash); 89 return !!misspellings_.count(hash);
96 } 90 }
97 91
98 void Feedback::AddMisspelling(int renderer_process_id, 92 void Feedback::AddMisspelling(int renderer_process_id,
99 const Misspelling& misspelling) { 93 const Misspelling& misspelling) {
100 misspellings_[misspelling.hash] = misspelling; 94 misspellings_[misspelling.hash] = misspelling;
101 hashes_[renderer_process_id].push_back(misspelling.hash); 95 hashes_[renderer_process_id].insert(misspelling.hash);
102 } 96 }
103 97
104 bool Feedback::Empty() const { 98 bool Feedback::Empty() const {
105 return misspellings_.empty(); 99 return misspellings_.empty();
106 } 100 }
107 101
108 std::vector<int> Feedback::GetRendersWithMisspellings() const { 102 std::vector<int> Feedback::GetRendersWithMisspellings() const {
109 std::vector<int> result; 103 std::vector<int> result;
110 for (std::map<int, std::vector<uint32> >::const_iterator it = hashes_.begin(); 104 for (RendererHashesMap::const_iterator it = hashes_.begin();
111 it != hashes_.end(); 105 it != hashes_.end();
112 ++it) { 106 ++it) {
113 if (!it->second.empty()) 107 if (!it->second.empty())
114 result.push_back(it->first); 108 result.push_back(it->first);
115 } 109 }
116 return result; 110 return result;
117 } 111 }
118 112
119 void Feedback::FinalizeAllMisspellings() { 113 void Feedback::FinalizeAllMisspellings() {
120 for (std::map<uint32, Misspelling>::iterator it = misspellings_.begin(); 114 for (HashMisspellingMap::iterator it = misspellings_.begin();
121 it != misspellings_.end(); 115 it != misspellings_.end();
122 ++it) { 116 ++it) {
123 if (!it->second.action.IsFinal()) 117 if (!it->second.action.IsFinal())
124 it->second.action.Finalize(); 118 it->second.action.Finalize();
125 } 119 }
126 } 120 }
127 121
128 std::vector<Misspelling> Feedback::GetAllMisspellings() const { 122 std::vector<Misspelling> Feedback::GetAllMisspellings() const {
129 std::vector<Misspelling> result; 123 std::vector<Misspelling> result;
130 for (std::map<uint32, Misspelling>::const_iterator it = misspellings_.begin(); 124 for (HashMisspellingMap::const_iterator it = misspellings_.begin();
131 it != misspellings_.end(); 125 it != misspellings_.end();
132 ++it) { 126 ++it) {
133 result.push_back(it->second); 127 result.push_back(it->second);
134 } 128 }
135 return result; 129 return result;
136 } 130 }
137 131
138 void Feedback::Clear() { 132 void Feedback::Clear() {
139 misspellings_.clear(); 133 misspellings_.clear();
140 hashes_.clear(); 134 hashes_.clear();
141 } 135 }
142 136
143 } // namespace spellcheck 137 } // 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