Home | History | Annotate | Download | only in extensions
      1 // Copyright (c) 2011 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 #include "chrome/browser/extensions/extension_test_api.h"
      6 
      7 #include <string>
      8 
      9 #include "base/memory/singleton.h"
     10 #include "chrome/browser/extensions/extension_service.h"
     11 #include "chrome/browser/extensions/extensions_quota_service.h"
     12 #include "chrome/browser/profiles/profile.h"
     13 #include "chrome/browser/ui/browser.h"
     14 #include "content/common/notification_service.h"
     15 
     16 namespace {
     17 
     18 // If you see this error in your test, you need to set the config state
     19 // to be returned by chrome.test.getConfig().  Do this by calling
     20 // ExtensionTestGetConfigFunction::set_test_config_state(Value* state)
     21 // in test set up.
     22 const char kNoTestConfigDataError[] = "Test configuration was not set.";
     23 
     24 }  // namespace
     25 
     26 ExtensionTestPassFunction::~ExtensionTestPassFunction() {}
     27 
     28 bool ExtensionTestPassFunction::RunImpl() {
     29   NotificationService::current()->Notify(
     30       NotificationType::EXTENSION_TEST_PASSED,
     31       Source<Profile>(dispatcher()->profile()),
     32       NotificationService::NoDetails());
     33   return true;
     34 }
     35 
     36 ExtensionTestFailFunction::~ExtensionTestFailFunction() {}
     37 
     38 bool ExtensionTestFailFunction::RunImpl() {
     39   std::string message;
     40   EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &message));
     41   NotificationService::current()->Notify(
     42       NotificationType::EXTENSION_TEST_FAILED,
     43       Source<Profile>(dispatcher()->profile()),
     44       Details<std::string>(&message));
     45   return true;
     46 }
     47 
     48 ExtensionTestLogFunction::~ExtensionTestLogFunction() {}
     49 
     50 bool ExtensionTestLogFunction::RunImpl() {
     51   std::string message;
     52   EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &message));
     53   return true;
     54 }
     55 
     56 ExtensionTestQuotaResetFunction::~ExtensionTestQuotaResetFunction() {}
     57 
     58 bool ExtensionTestQuotaResetFunction::RunImpl() {
     59   ExtensionService* service = profile()->GetExtensionService();
     60   ExtensionsQuotaService* quota = service->quota_service();
     61   quota->Purge();
     62   quota->violators_.clear();
     63   return true;
     64 }
     65 
     66 ExtensionTestCreateIncognitoTabFunction::
     67    ~ExtensionTestCreateIncognitoTabFunction() {}
     68 
     69 bool ExtensionTestCreateIncognitoTabFunction::RunImpl() {
     70   std::string url;
     71   EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &url));
     72   Browser::OpenURLOffTheRecord(profile(), GURL(url));
     73   return true;
     74 }
     75 
     76 bool ExtensionTestSendMessageFunction::RunImpl() {
     77   std::string message;
     78   EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &message));
     79   AddRef();  // balanced in Reply
     80   NotificationService::current()->Notify(
     81       NotificationType::EXTENSION_TEST_MESSAGE,
     82       Source<ExtensionTestSendMessageFunction>(this),
     83       Details<std::string>(&message));
     84   return true;
     85 }
     86 ExtensionTestSendMessageFunction::~ExtensionTestSendMessageFunction() {}
     87 
     88 void ExtensionTestSendMessageFunction::Reply(const std::string& message) {
     89   result_.reset(Value::CreateStringValue(message));
     90   SendResponse(true);
     91   Release();  // balanced in RunImpl
     92 }
     93 
     94 // static
     95 void ExtensionTestGetConfigFunction::set_test_config_state(
     96     DictionaryValue* value) {
     97   TestConfigState* test_config_state = TestConfigState::GetInstance();
     98   test_config_state->set_config_state(value);
     99 }
    100 
    101 ExtensionTestGetConfigFunction::TestConfigState::TestConfigState()
    102   : config_state_(NULL) {}
    103 
    104 // static
    105 ExtensionTestGetConfigFunction::TestConfigState*
    106 ExtensionTestGetConfigFunction::TestConfigState::GetInstance() {
    107   return Singleton<TestConfigState>::get();
    108 }
    109 
    110 ExtensionTestGetConfigFunction::~ExtensionTestGetConfigFunction() {}
    111 
    112 bool ExtensionTestGetConfigFunction::RunImpl() {
    113   TestConfigState* test_config_state = TestConfigState::GetInstance();
    114 
    115   if (!test_config_state->config_state()) {
    116     error_ = kNoTestConfigDataError;
    117     return false;
    118   }
    119 
    120   result_.reset(test_config_state->config_state()->DeepCopy());
    121   return true;
    122 }
    123