summaryrefslogtreecommitdiffstats
path: root/ppapi/tests/test_flash.cc
blob: d7ac95ad8b724e34fc54728aa69902f1bff553e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Copyright (c) 2011 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.

#include "ppapi/tests/test_flash.h"

#include "base/compiler_specific.h"
#include "ppapi/c/private/ppb_flash.h"
#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/module.h"
#include "ppapi/cpp/var.h"
#include "ppapi/tests/testing_instance.h"

REGISTER_TEST_CASE(Flash);

using pp::Var;

TestFlash::TestFlash(TestingInstance* instance)
    : TestCase(instance),
      ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)) {
}

bool TestFlash::Init() {
  flash_interface_ = static_cast<const PPB_Flash*>(
      pp::Module::Get()->GetBrowserInterface(PPB_FLASH_INTERFACE));
  return !!flash_interface_;
}

void TestFlash::RunTests(const std::string& filter) {
  RUN_TEST(SetInstanceAlwaysOnTop, filter);
  RUN_TEST(GetProxyForURL, filter);
  RUN_TEST(MessageLoop, filter);
  RUN_TEST(GetLocalTimeZoneOffset, filter);
  RUN_TEST(GetCommandLineArgs, filter);
}

std::string TestFlash::TestSetInstanceAlwaysOnTop() {
  flash_interface_->SetInstanceAlwaysOnTop(instance_->pp_instance(), PP_TRUE);
  flash_interface_->SetInstanceAlwaysOnTop(instance_->pp_instance(), PP_FALSE);
  PASS();
}

std::string TestFlash::TestGetProxyForURL() {
  Var result(Var::PassRef(),
             flash_interface_->GetProxyForURL(instance_->pp_instance(),
                                              "http://127.0.0.1/foobar/"));
  ASSERT_TRUE(result.is_string());
  // Assume no one configures a proxy for localhost.
  ASSERT_EQ("DIRECT", result.AsString());

  result = Var(Var::PassRef(),
               flash_interface_->GetProxyForURL(instance_->pp_instance(),
                                                "http://www.google.com"));
  // Don't know what the proxy might be, but it should be a valid result.
  ASSERT_TRUE(result.is_string());

  result = Var(Var::PassRef(),
               flash_interface_->GetProxyForURL(instance_->pp_instance(),
                                                "file:///tmp"));
  ASSERT_TRUE(result.is_string());
  // Should get "DIRECT" for file:// URLs.
  ASSERT_EQ("DIRECT", result.AsString());

  result = Var(Var::PassRef(),
               flash_interface_->GetProxyForURL(instance_->pp_instance(),
                                                "this_isnt_an_url"));
  // Should be an error.
  ASSERT_TRUE(result.is_undefined());

  PASS();
}

std::string TestFlash::TestMessageLoop() {
  pp::CompletionCallback callback =
      callback_factory_.NewRequiredCallback(&TestFlash::QuitMessageLoopTask);
  pp::Module::Get()->core()->CallOnMainThread(0, callback);
  flash_interface_->RunMessageLoop(instance_->pp_instance());

  PASS();
}

std::string TestFlash::TestGetLocalTimeZoneOffset() {
  double result = flash_interface_->GetLocalTimeZoneOffset(
      instance_->pp_instance(), 1321491298.0);
  // The result depends on the local time zone, but +/- 14h from UTC should
  // cover the possibilities.
  ASSERT_TRUE(result >= -14 * 60 * 60);
  ASSERT_TRUE(result <= 14 * 60 * 60);

  PASS();
}

std::string TestFlash::TestGetCommandLineArgs() {
  Var result(Var::PassRef(),
             flash_interface_->GetCommandLineArgs(
                 pp::Module::Get()->pp_module()));
  ASSERT_TRUE(result.is_string());

  PASS();
}

void TestFlash::QuitMessageLoopTask(int32_t) {
  flash_interface_->QuitMessageLoop(instance_->pp_instance());
}