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
3 // found in the LICENSE file.
4
5 #include <string>
6
7 #include "base/json/json_reader.h"
8 #include "base/values.h"
9 #include "chrome/test/chromedriver/chrome/frame_tracker.h"
10 #include "chrome/test/chromedriver/chrome/status.h"
11 #include "chrome/test/chromedriver/chrome/stub_devtools_client.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
TEST(FrameTracker,GetContextIdForFrame)14 TEST(FrameTracker, GetContextIdForFrame) {
15 StubDevToolsClient client;
16 FrameTracker tracker(&client);
17 int context_id = -1;
18 ASSERT_TRUE(tracker.GetContextIdForFrame("f", &context_id).IsError());
19 ASSERT_EQ(-1, context_id);
20
21 const char context[] = "{\"id\":100,\"frameId\":\"f\"}";
22 base::DictionaryValue params;
23 params.Set("context", base::JSONReader::Read(context));
24 ASSERT_EQ(kOk,
25 tracker.OnEvent(&client, "Runtime.executionContextCreated", params)
26 .code());
27 ASSERT_EQ(kNoSuchExecutionContext,
28 tracker.GetContextIdForFrame("foo", &context_id).code());
29 ASSERT_EQ(-1, context_id);
30 ASSERT_TRUE(tracker.GetContextIdForFrame("f", &context_id).IsOk());
31 ASSERT_EQ(100, context_id);
32
33 base::DictionaryValue nav_params;
34 nav_params.SetString("frame.parentId", "1");
35 ASSERT_EQ(kOk,
36 tracker.OnEvent(&client, "Page.frameNavigated", nav_params).code());
37 ASSERT_TRUE(tracker.GetContextIdForFrame("f", &context_id).IsOk());
38 nav_params.Clear();
39 ASSERT_EQ(kOk,
40 tracker.OnEvent(&client, "Page.frameNavigated", nav_params).code());
41 ASSERT_EQ(kNoSuchExecutionContext,
42 tracker.GetContextIdForFrame("f", &context_id).code());
43 }
44
TEST(FrameTracker,CanUpdateFrameContextId)45 TEST(FrameTracker, CanUpdateFrameContextId) {
46 StubDevToolsClient client;
47 FrameTracker tracker(&client);
48
49 const char context[] = "{\"id\":1,\"frameId\":\"f\"}";
50 base::DictionaryValue params;
51 params.Set("context", base::JSONReader::Read(context));
52 ASSERT_EQ(kOk,
53 tracker.OnEvent(&client, "Runtime.executionContextCreated", params)
54 .code());
55 int context_id = -1;
56 ASSERT_TRUE(tracker.GetContextIdForFrame("f", &context_id).IsOk());
57 ASSERT_EQ(1, context_id);
58
59 params.SetInteger("context.id", 2);
60 ASSERT_EQ(kOk,
61 tracker.OnEvent(&client, "Runtime.executionContextCreated", params)
62 .code());
63 ASSERT_TRUE(tracker.GetContextIdForFrame("f", &context_id).IsOk());
64 ASSERT_EQ(2, context_id);
65 }
66