Home | History | Annotate | Download | only in base
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_TEST_BASE_EXTENSION_LOAD_WAITER_ONE_SHOT_H_
      6 #define CHROME_TEST_BASE_EXTENSION_LOAD_WAITER_ONE_SHOT_H_
      7 
      8 #include "base/callback_forward.h"
      9 #include "content/public/browser/notification_observer.h"
     10 #include "content/public/browser/notification_registrar.h"
     11 #include "content/public/test/test_utils.h"
     12 
     13 namespace content {
     14 class BrowserContext;
     15 }  // namespace content
     16 
     17 // A class used to wait for an extension to load. Callers provide a load
     18 // callback and can block until the extension loads.
     19 class ExtensionLoadWaiterOneShot : public content::NotificationObserver {
     20  public:
     21   ExtensionLoadWaiterOneShot();
     22   virtual ~ExtensionLoadWaiterOneShot();
     23 
     24   // Waits for extension with |extension_id| to load. The id should be a pointer
     25   // to a static char array.
     26   void WaitForExtension(const char* extension_id, const base::Closure& load_cb);
     27 
     28   // content::NotificationObserver overrides.
     29   virtual void Observe(int type,
     30                        const content::NotificationSource& source,
     31                        const content::NotificationDetails& details) OVERRIDE;
     32 
     33   // Get the browser context associated with the loaded extension. Returns
     34   // NULL if |WaitForExtension| was not previously called.
     35   content::BrowserContext* browser_context() { return browser_context_; }
     36 
     37   // Get the id of the loaded extension.
     38   const char* extension_id() { return extension_id_; }
     39 
     40  private:
     41   content::NotificationRegistrar registrar_;
     42   scoped_refptr<content::MessageLoopRunner> load_looper_;
     43   const char* extension_id_;
     44   content::BrowserContext* browser_context_;
     45 
     46   DISALLOW_COPY_AND_ASSIGN(ExtensionLoadWaiterOneShot);
     47 };
     48 
     49 #endif  // CHROME_TEST_BASE_EXTENSION_LOAD_WAITER_ONE_SHOT_H_
     50