15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef EXTENSIONS_BROWSER_ERROR_MAP_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define EXTENSIONS_BROWSER_ERROR_MAP_H_ 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <deque> 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <map> 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string> 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/basictypes.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_error.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace extensions { 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef std::deque<const ExtensionError*> ErrorList; 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// An ErrorMap is responsible for storing Extension-related errors, keyed by 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Extension ID. The errors are owned by the ErrorMap, and are deleted upon 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// destruction. 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ErrorMap { 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ErrorMap(); 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ~ErrorMap(); 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Return the list of all errors associated with the given extension. 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ErrorList& GetErrorsForExtension(const std::string& extension_id) const; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Add the |error| to the ErrorMap. 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ExtensionError* AddError(scoped_ptr<ExtensionError> error); 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Remove an extension from the ErrorMap, deleting all associated errors. 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void Remove(const std::string& extension_id); 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Remove all errors of a given type for an extension. 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void RemoveErrorsForExtensionOfType(const std::string& extension_id, 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionError::Type type); 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Remove all incognito errors for all extensions. 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void RemoveIncognitoErrors(); 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Remove all errors for all extensions, and clear the map. 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void RemoveAllErrors(); 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t size() const { return map_.size(); } 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // An Entry is created for each Extension ID, and stores the errors related to 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // that Extension. 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) class ExtensionEntry { 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionEntry(); 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ~ExtensionEntry(); 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Delete all errors associated with this extension. 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void DeleteAllErrors(); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Delete all incognito errors associated with this extension. 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void DeleteIncognitoErrors(); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Delete all errors of the given |type| associated with this extension. 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void DeleteErrorsOfType(ExtensionError::Type type); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Add the error to the list, and return a weak reference. 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ExtensionError* AddError(scoped_ptr<ExtensionError> error); 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ErrorList* list() const { return &list_; } 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The list of all errors associated with the extension. The errors are 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // owned by the Entry (in turn owned by the ErrorMap) and are deleted upon 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // destruction. 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ErrorList list_; 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ExtensionEntry); 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) typedef std::map<std::string, ExtensionEntry*> EntryMap; 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The mapping between Extension IDs and their corresponding Entries. 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EntryMap map_; 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ErrorMap); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace extensions 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // EXTENSIONS_BROWSER_ERROR_MAP_H_ 85