Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(781)

Side by Side Diff: ppapi/tests/test_instance_deprecated.cc

Issue 400823004: gin (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/tests/test_case.h ('k') | ppapi/tests/test_var_deprecated.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/tests/test_instance_deprecated.h" 5 #include "ppapi/tests/test_instance_deprecated.h"
6 6
7 #include <assert.h> 7 #include <assert.h>
8 #include <iostream>
9 8
10 #include "ppapi/c/ppb_var.h" 9 #include "ppapi/c/ppb_var.h"
11 #include "ppapi/cpp/module.h" 10 #include "ppapi/cpp/module.h"
12 #include "ppapi/cpp/dev/scriptable_object_deprecated.h" 11 #include "ppapi/cpp/dev/scriptable_object_deprecated.h"
13 #include "ppapi/tests/testing_instance.h" 12 #include "ppapi/tests/testing_instance.h"
14 13
15 namespace { 14 namespace {
16 15
17 static const char kSetValueFunction[] = "SetValue"; 16 static const char kSetValueFunction[] = "SetValue";
18 static const char kSetExceptionFunction[] = "SetException"; 17 static const char kSetExceptionFunction[] = "SetException";
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 REGISTER_TEST_CASE(Instance); 118 REGISTER_TEST_CASE(Instance);
120 119
121 TestInstance::TestInstance(TestingInstance* instance) : TestCase(instance) { 120 TestInstance::TestInstance(TestingInstance* instance) : TestCase(instance) {
122 } 121 }
123 122
124 bool TestInstance::Init() { 123 bool TestInstance::Init() {
125 return true; 124 return true;
126 } 125 }
127 126
128 TestInstance::~TestInstance() { 127 TestInstance::~TestInstance() {
128 ResetTestObject();
129 // When running tests in process, some post conditions check that teardown
130 // happened successfully. We need to run the garbage collector to ensure that
131 // vars get released.
132 if (testing_interface_->IsOutOfProcess() == PP_FALSE)
133 testing_interface_->RunV8GC(instance_->pp_instance());
129 // Save the fact that we were destroyed in sessionStorage. This tests that 134 // Save the fact that we were destroyed in sessionStorage. This tests that
130 // we can ExecuteScript at instance destruction without crashing. It also 135 // we can ExecuteScript at instance destruction without crashing. It also
131 // allows us to check that ExecuteScript will run and succeed in certain 136 // allows us to check that ExecuteScript will run and succeed in certain
132 // cases. In particular, when the instance is destroyed by normal DOM 137 // cases. In particular, when the instance is destroyed by normal DOM
133 // deletion, ExecuteScript will actually work. See 138 // deletion, ExecuteScript will actually work. See
134 // TestExecuteScriptInInstanceShutdown for that test. Note, however, that 139 // TestExecuteScriptInInstanceShutdown for that test. Note, however, that
135 // ExecuteScript will *not* have an effect when the instance is destroyed 140 // ExecuteScript will *not* have an effect when the instance is destroyed
136 // because the renderer was shut down. 141 // because the renderer was shut down.
137 pp::Var ret = instance()->ExecuteScript( 142 pp::Var ret = instance()->ExecuteScript(
138 "sessionStorage.setItem('instance_destroyed', 'true');"); 143 "sessionStorage.setItem('instance_destroyed', 'true');");
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 new ObjectWithChildren(i, num_descendents - 1, 216 new ObjectWithChildren(i, num_descendents - 1,
212 IgnoreLeaks())); 217 IgnoreLeaks()));
213 i->IgnoreLeakedVar(child_.pp_var().value.as_id); 218 i->IgnoreLeakedVar(child_.pp_var().value.as_id);
214 } 219 }
215 } 220 }
216 private: 221 private:
217 pp::VarPrivate child_; 222 pp::VarPrivate child_;
218 }; 223 };
219 224
220 std::string TestInstance::TestRecursiveObjects() { 225 std::string TestInstance::TestRecursiveObjects() {
221 // These should be deleted when we exit scope, so should not leak. 226 const int kNumChildren = 20;
222 pp::VarPrivate not_leaked(instance(), new ObjectWithChildren(this, 50)); 227 {
228 // These should be deleted when we exit scope, so should not leak.
229 pp::VarPrivate not_leaked(instance(), new ObjectWithChildren(this,
230 kNumChildren));
231 }
232 // We need to run the GC multiple times until all of the vars are released.
233 // Each GC invocation will result in releasing a var, which will result in its
234 // children not having any references, allowing them also to be collected.
235 for (int i = 0; i < kNumChildren; ++i)
236 testing_interface_->RunV8GC(instance_->pp_instance());
223 237
224 // Leak some, but tell TestCase to ignore the leaks. This test is run and then 238 // Leak some, but tell TestCase to ignore the leaks. This test is run and then
225 // reloaded (see ppapi_uitest.cc). If these aren't cleaned up when the first 239 // reloaded (see ppapi_uitest.cc). If these aren't cleaned up when the first
226 // run is torn down, they will show up as leaks in the second run. 240 // run is torn down, they will show up as leaks in the second run.
227 // NOTE: The ScriptableObjects are actually leaked, but they should be removed 241 // NOTE: The ScriptableObjects are actually leaked, but they should be removed
228 // from the tracker. See below for a test that verifies that the 242 // from the tracker. See below for a test that verifies that the
229 // destructor is not run. 243 // destructor is not run.
230 pp::VarPrivate leaked( 244 pp::VarPrivate leaked(
231 instance(), 245 instance(),
232 new ObjectWithChildren(this, 50, ObjectWithChildren::IgnoreLeaks())); 246 new ObjectWithChildren(this, kNumChildren,
247 ObjectWithChildren::IgnoreLeaks()));
233 // Now leak a reference to the root object. This should force the root and 248 // Now leak a reference to the root object. This should force the root and
234 // all its descendents to stay in the tracker. 249 // all its descendents to stay in the tracker.
235 LeakReferenceAndIgnore(leaked); 250 LeakReferenceAndIgnore(leaked);
236 251
237 PASS(); 252 PASS();
238 } 253 }
239 254
240 // A scriptable object that should cause a crash if its destructor is run. We 255 // A scriptable object that should cause a crash if its destructor is run. We
241 // don't run the destructor for objects which the plugin leaks. This is to 256 // don't run the destructor for objects which the plugin leaks. This is to
242 // prevent them doing dangerous things at cleanup time, such as executing script 257 // prevent them doing dangerous things at cleanup time, such as executing script
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 // that it was set as expected. 292 // that it was set as expected.
278 pp::Var result = instance()->ExecuteScript( 293 pp::Var result = instance()->ExecuteScript(
279 "sessionStorage.getItem('instance_destroyed');"); 294 "sessionStorage.getItem('instance_destroyed');");
280 ASSERT_TRUE(result.is_string()); 295 ASSERT_TRUE(result.is_string());
281 ASSERT_EQ(std::string("true"), result.AsString()); 296 ASSERT_EQ(std::string("true"), result.AsString());
282 instance()->ExecuteScript("sessionStorage.removeItem('instance_destroyed');"); 297 instance()->ExecuteScript("sessionStorage.removeItem('instance_destroyed');");
283 298
284 PASS(); 299 PASS();
285 } 300 }
286 301
OLDNEW
« no previous file with comments | « ppapi/tests/test_case.h ('k') | ppapi/tests/test_var_deprecated.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698