blob: f79dcc420dcb0a39fbf01641aa111fe61bfa9dfa [file] [log] [blame]
// Copyright (c) 2012 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 <string>
#include "base/json/json_reader.h"
#include "base/values.h"
#include "chrome/test/chromedriver/chrome/frame_tracker.h"
#include "chrome/test/chromedriver/chrome/status.h"
#include "chrome/test/chromedriver/chrome/stub_devtools_client.h"
#include "testing/gtest/include/gtest/gtest.h"
TEST(FrameTracker, GetContextIdForFrame) {
StubDevToolsClient client;
FrameTracker tracker(&client);
int context_id = -1;
ASSERT_TRUE(tracker.GetContextIdForFrame("f", &context_id).IsError());
ASSERT_EQ(-1, context_id);
const char context[] = "{\"id\":100,\"frameId\":\"f\"}";
base::DictionaryValue params;
params.Set("context", base::JSONReader::Read(context));
ASSERT_EQ(kOk,
tracker.OnEvent(&client, "Runtime.executionContextCreated", params)
.code());
ASSERT_EQ(kNoSuchExecutionContext,
tracker.GetContextIdForFrame("foo", &context_id).code());
ASSERT_EQ(-1, context_id);
ASSERT_TRUE(tracker.GetContextIdForFrame("f", &context_id).IsOk());
ASSERT_EQ(100, context_id);
base::DictionaryValue nav_params;
nav_params.SetString("frame.parentId", "1");
ASSERT_EQ(kOk,
tracker.OnEvent(&client, "Page.frameNavigated", nav_params).code());
ASSERT_TRUE(tracker.GetContextIdForFrame("f", &context_id).IsOk());
nav_params.Clear();
ASSERT_EQ(kOk,
tracker.OnEvent(&client, "Page.frameNavigated", nav_params).code());
ASSERT_EQ(kNoSuchExecutionContext,
tracker.GetContextIdForFrame("f", &context_id).code());
}
TEST(FrameTracker, CanUpdateFrameContextId) {
StubDevToolsClient client;
FrameTracker tracker(&client);
const char context[] = "{\"id\":1,\"frameId\":\"f\"}";
base::DictionaryValue params;
params.Set("context", base::JSONReader::Read(context));
ASSERT_EQ(kOk,
tracker.OnEvent(&client, "Runtime.executionContextCreated", params)
.code());
int context_id = -1;
ASSERT_TRUE(tracker.GetContextIdForFrame("f", &context_id).IsOk());
ASSERT_EQ(1, context_id);
params.SetInteger("context.id", 2);
ASSERT_EQ(kOk,
tracker.OnEvent(&client, "Runtime.executionContextCreated", params)
.code());
ASSERT_TRUE(tracker.GetContextIdForFrame("f", &context_id).IsOk());
ASSERT_EQ(2, context_id);
}