// Copyright (c) 2012 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.

#ifndef CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_PROVIDER_LISTENER_H_
#define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_PROVIDER_LISTENER_H_

class AutocompleteProviderListener {
 public:
  // Called by a provider as a notification that something has changed.
  // |updated_matches| should be true iff the matches have changed in some
  // way (they may not have changed if, for example, the provider did an
  // asynchronous query to get more matches, came up with none, and is now
  // giving up).
  //
  // NOTE: Providers MUST only call this method while processing asynchronous
  // queries.  Do not call this for a synchronous query.
  //
  // NOTE: There's no parameter to tell the listener _which_ provider is
  // calling it.  Because the AutocompleteController (the typical listener)
  // doesn't cache the providers' individual matches locally, it has to get
  // them all again when this is called anyway, so such a parameter wouldn't
  // actually be useful.
  virtual void OnProviderUpdate(bool updated_matches) = 0;

 protected:
  virtual ~AutocompleteProviderListener() {}
};

#endif  // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_PROVIDER_LISTENER_H_
