// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // An object to store user feedback to spellcheck suggestions from spelling // service. // // Stores feedback for the spelling service in |Misspelling| objects. Each // |Misspelling| object is identified by a |hash| and corresponds to a document // marker with the same |hash| identifier in the renderer. #ifndef CHROME_BROWSER_SPELLCHECKER_FEEDBACK_H_ #define CHROME_BROWSER_SPELLCHECKER_FEEDBACK_H_ #include #include #include #include "chrome/browser/spellchecker/misspelling.h" namespace spellcheck { // Stores user feedback to spellcheck suggestions. Sample usage: // Feedback feedback; // feedback.AddMisspelling(renderer_process_id, Misspelling( // ASCIIToUTF16("Helllo world"), 0, 6, std::vector(), // GenerateRandomHash())); // feedback.FinalizeRemovedMisspellings(renderer_process_id, // std::vector()); // ProcessFeedback(feedback.GetMisspellingsInRenderer(renderer_process_id)); // feedback.EraseFinalizedMisspellings(renderer_process_id); class Feedback { public: Feedback(); ~Feedback(); // Returns the misspelling identified by |hash|. Returns NULL if there's no // misspelling identified by |hash|. Retains the ownership of the result. The // caller should not modify the hash in the returned misspelling. Misspelling* GetMisspelling(uint32 hash); // Finalizes the user actions on misspellings that are removed from the // renderer process with ID |renderer_process_id|. void FinalizeRemovedMisspellings( int renderer_process_id, const std::vector& remaining_markers); // Returns true if the renderer with process ID |renderer_process_id| has // misspellings. bool RendererHasMisspellings(int renderer_process_id) const; // Returns a copy of the misspellings in renderer with process ID // |renderer_process_id|. std::vector GetMisspellingsInRenderer( int renderer_process_id) const; // Erases the misspellings with final user actions in the renderer with // process ID |renderer_process_id|. void EraseFinalizedMisspellings(int renderer_process_id); // Returns true if there's a misspelling with |hash| identifier. bool HasMisspelling(uint32 hash) const; // Adds the |misspelling| to feedback data. If the |misspelling| has a // duplicate hash, then replaces the existing misspelling with the same hash. void AddMisspelling(int renderer_process_id, const Misspelling& misspelling); // Returns true if there're no misspellings. bool Empty() const; // Returns a list of process identifiers for renderers that have misspellings. std::vector GetRendersWithMisspellings() const; // Finalizes all misspellings. void FinalizeAllMisspellings(); // Returns a copy of all misspellings. std::vector GetAllMisspellings() const; // Removes all misspellings. void Clear(); // Returns a list of all misspelling identifiers for |misspelled_text|. const std::set& FindMisspellings( const string16& misspelled_text) const; private: typedef std::map HashMisspellingMap; typedef std::set HashCollection; typedef std::map RendererHashesMap; typedef std::map TextHashesMap; // An empty hash collection to return when FindMisspellings() does not find // misspellings. const HashCollection empty_hash_collection_; // A map of hashes that identify document markers to feedback data to be sent // to spelling service. HashMisspellingMap misspellings_; // A map of renderer process ID to hashes that identify misspellings. RendererHashesMap renderers_; // A map of misspelled text to hashes that identify misspellings. TextHashesMap text_; DISALLOW_COPY_AND_ASSIGN(Feedback); }; } // namespace spellcheck #endif // CHROME_BROWSER_SPELLCHECKER_FEEDBACK_H_