Home | History | Annotate | Download | only in test
      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 EXTENSIONS_TEST_RESULT_CATCHER_H_
      6 #define EXTENSIONS_TEST_RESULT_CATCHER_H_
      7 
      8 #include <deque>
      9 #include <string>
     10 
     11 #include "base/compiler_specific.h"
     12 #include "content/public/browser/notification_observer.h"
     13 #include "content/public/browser/notification_registrar.h"
     14 
     15 namespace content {
     16 class BrowserContext;
     17 }  // namespace content
     18 
     19 namespace extensions {
     20 
     21 // Helper class that observes tests failing or passing. Observation starts
     22 // when the class is constructed. Get the next result by calling
     23 // GetNextResult() and message() if GetNextResult() return false. If there
     24 // are no results, this method will pump the UI message loop until one is
     25 // received.
     26 class ResultCatcher : public content::NotificationObserver {
     27  public:
     28   ResultCatcher();
     29   virtual ~ResultCatcher();
     30 
     31   // Pumps the UI loop until a notification is received that an API test
     32   // succeeded or failed. Returns true if the test succeeded, false otherwise.
     33   bool GetNextResult();
     34 
     35   void RestrictToBrowserContext(content::BrowserContext* context) {
     36     browser_context_restriction_ = context;
     37   }
     38 
     39   const std::string& message() { return message_; }
     40 
     41  private:
     42   // content::NotificationObserver:
     43   virtual void Observe(int type,
     44                        const content::NotificationSource& source,
     45                        const content::NotificationDetails& details) OVERRIDE;
     46 
     47   content::NotificationRegistrar registrar_;
     48 
     49   // A sequential list of pass/fail notifications from the test extension(s).
     50   std::deque<bool> results_;
     51 
     52   // If it failed, what was the error message?
     53   std::deque<std::string> messages_;
     54   std::string message_;
     55 
     56   // If non-NULL, we will listen to events from this BrowserContext only.
     57   content::BrowserContext* browser_context_restriction_;
     58 
     59   // True if we're in a nested message loop waiting for results from
     60   // the extension.
     61   bool waiting_;
     62 };
     63 
     64 }  // namespace extensions
     65 
     66 #endif  // EXTENSIONS_TEST_RESULT_CATCHER_H_
     67