11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/result_catcher.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/notification_service.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_utils.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/notification_types.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace extensions { 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciResultCatcher::ResultCatcher() 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : browser_context_restriction_(NULL), waiting_(false) { 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci registrar_.Add(this, 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extensions::NOTIFICATION_EXTENSION_TEST_PASSED, 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::NotificationService::AllSources()); 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci registrar_.Add(this, 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extensions::NOTIFICATION_EXTENSION_TEST_FAILED, 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::NotificationService::AllSources()); 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciResultCatcher::~ResultCatcher() { 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ResultCatcher::GetNextResult() { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Depending on the tests, multiple results can come in from a single call 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // to RunMessageLoop(), so we maintain a queue of results and just pull them 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // off as the test calls this, going to the run loop only when the queue is 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // empty. 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (results_.empty()) { 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci waiting_ = true; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RunMessageLoop(); 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci waiting_ = false; 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!results_.empty()) { 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool ret = results_.front(); 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci results_.pop_front(); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci message_ = messages_.front(); 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci messages_.pop_front(); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return ret; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ResultCatcher::Observe(int type, 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const content::NotificationSource& source, 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const content::NotificationDetails& details) { 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (browser_context_restriction_ && 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::Source<content::BrowserContext>(source).ptr() != 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser_context_restriction_) { 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci switch (type) { 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case extensions::NOTIFICATION_EXTENSION_TEST_PASSED: 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VLOG(1) << "Got EXTENSION_TEST_PASSED notification."; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci results_.push_back(true); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci messages_.push_back(std::string()); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (waiting_) 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::MessageLoopForUI::current()->Quit(); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case extensions::NOTIFICATION_EXTENSION_TEST_FAILED: 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VLOG(1) << "Got EXTENSION_TEST_FAILED notification."; 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci results_.push_back(false); 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci messages_.push_back(*(content::Details<std::string>(details).ptr())); 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (waiting_) 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::MessageLoopForUI::current()->Quit(); 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci default: 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace extensions 81