12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/chromedriver/chrome/javascript_dialog_manager.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/chromedriver/chrome/status.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/chromedriver/chrome/stub_devtools_client.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(JavaScriptDialogManager, NoDialog) {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StubDevToolsClient client;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JavaScriptDialogManager manager(&client);
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string message("HI");
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(manager.IsDialogOpen());
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_STREQ("HI", message.c_str());
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, NULL).code());
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RecorderDevToolsClient : public StubDevToolsClient {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RecorderDevToolsClient() {}
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~RecorderDevToolsClient() {}
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from StubDevToolsClient:
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual Status SendCommandAndGetResult(
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::string& method,
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::DictionaryValue& params,
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<base::DictionaryValue>* result) OVERRIDE {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    method_ = method;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    params_.Clear();
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    params_.MergeDictionary(&params);
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return Status(kOk);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string method_;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue params_;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(JavaScriptDialogManager, HandleDialogPassesParams) {
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RecorderDevToolsClient client;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JavaScriptDialogManager manager(&client);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue params;
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  params.SetString("message", "hi");
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(
55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kOk,
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  std::string given_text("text");
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(kOk, manager.HandleDialog(false, &given_text).code());
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string text;
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  client.params_.GetString("promptText", &text);
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(given_text, text);
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(client.params_.HasKey("accept"));
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST(JavaScriptDialogManager, HandleDialogNullPrompt) {
6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  RecorderDevToolsClient client;
6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  JavaScriptDialogManager manager(&client);
6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::DictionaryValue params;
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  params.SetString("message", "hi");
70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(
71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kOk,
72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(kOk, manager.HandleDialog(false, NULL).code());
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_FALSE(client.params_.HasKey("promptText"));
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(client.params_.HasKey("accept"));
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(JavaScriptDialogManager, ReconnectClearsStateAndSendsEnable) {
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RecorderDevToolsClient client;
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JavaScriptDialogManager manager(&client);
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue params;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  params.SetString("message", "hi");
83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(
84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kOk,
85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(manager.IsDialogOpen());
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string message;
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code());
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(manager.OnConnected(&client).IsOk());
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ("Page.enable", client.method_);
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(manager.IsDialogOpen());
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, NULL).code());
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FakeDevToolsClient : public StubDevToolsClient {
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FakeDevToolsClient() : listener_(NULL), closing_count_(0) {}
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~FakeDevToolsClient() {}
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_closing_count(int closing_count) {
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    closing_count_ = closing_count;
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from StubDevToolsClient:
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual Status SendCommandAndGetResult(
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::string& method,
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::DictionaryValue& params,
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<base::DictionaryValue>* result) OVERRIDE {
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    while (closing_count_ > 0) {
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::DictionaryValue empty;
115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      Status status =
116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)          listener_->OnEvent(this, "Page.javascriptDialogClosing", empty);
117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      if (status.IsError())
118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        return status;
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      closing_count_--;
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return Status(kOk);
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void AddListener(DevToolsEventListener* listener) OVERRIDE {
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    listener_ = listener;
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DevToolsEventListener* listener_;
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int closing_count_;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(JavaScriptDialogManager, OneDialog) {
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FakeDevToolsClient client;
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JavaScriptDialogManager manager(&client);
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue params;
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  params.SetString("message", "hi");
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(manager.IsDialogOpen());
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string message;
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(
144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kOk,
145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(manager.IsDialogOpen());
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code());
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ("hi", message);
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  client.set_closing_count(1);
15190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(kOk, manager.HandleDialog(false, NULL).code());
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(manager.IsDialogOpen());
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, NULL).code());
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(JavaScriptDialogManager, TwoDialogs) {
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FakeDevToolsClient client;
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JavaScriptDialogManager manager(&client);
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue params;
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  params.SetString("message", "1");
162868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(
163868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kOk,
164868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  params.SetString("message", "2");
166868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(
167868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kOk,
168868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string message;
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code());
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(manager.IsDialogOpen());
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ("1", message);
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(kOk, manager.HandleDialog(false, NULL).code());
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(manager.IsDialogOpen());
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code());
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ("2", message);
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  client.set_closing_count(2);
18190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(kOk, manager.HandleDialog(false, NULL).code());
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(manager.IsDialogOpen());
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
18490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, NULL).code());
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(JavaScriptDialogManager, OneDialogManualClose) {
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StubDevToolsClient client;
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JavaScriptDialogManager manager(&client);
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue params;
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  params.SetString("message", "hi");
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(manager.IsDialogOpen());
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string message;
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(
197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kOk,
198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      manager.OnEvent(&client, "Page.javascriptDialogOpening", params).code());
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(manager.IsDialogOpen());
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kOk, manager.GetDialogMessage(&message).code());
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ("hi", message);
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
203868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(
204868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kOk,
205868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      manager.OnEvent(&client, "Page.javascriptDialogClosing", params).code());
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(manager.IsDialogOpen());
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.GetDialogMessage(&message).code());
20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(kNoAlertOpen, manager.HandleDialog(false, NULL).code());
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
210