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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
// 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.
#ifndef CHROME_TEST_WEBDRIVER_WEBDRIVER_UTIL_H_
#define CHROME_TEST_WEBDRIVER_WEBDRIVER_UTIL_H_
#include <string>
#include <vector>
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/values.h"
#include "chrome/test/automation/value_conversion_traits.h"
#include "chrome/test/webdriver/webdriver_error.h"
class AutomationId;
class FilePath;
class WebViewId;
namespace webdriver {
// Generates a random, 32-character hexidecimal ID.
std::string GenerateRandomID();
// Decodes the given base64-encoded string, after removing any newlines,
// which are required in some base64 standards.
// Returns true on success.
bool Base64Decode(const std::string& base64, std::string* bytes);
// Unzip the given zip archive, after base64 decoding, into the given directory.
// Returns true on success.
bool Base64DecodeAndUnzip(const FilePath& unzip_dir,
const std::string& base64,
std::string* error_msg);
// Unzips the sole file contained in the given zip data |bytes| into
// |unzip_dir|. The zip data may be a normal zip archive or a single zip file
// entry. If the unzip successfully produced one file, returns true and sets
// |file| to the unzipped file.
// TODO(kkania): Remove the ability to parse single zip file entries when
// the current versions of all WebDriver clients send actual zip files.
bool UnzipSoleFile(const FilePath& unzip_dir,
const std::string& bytes,
FilePath* file,
std::string* error_msg);
// Returns the equivalent JSON string for the given value.
std::string JsonStringify(const base::Value* value);
// Returns the JSON string for the given value, with the exception that
// long strings are shortened for easier display.
std::string JsonStringifyForDisplay(const base::Value* value);
// Returns the string representation of the given type, for display purposes.
const char* GetJsonTypeName(base::Value::Type type);
// Converts the automation ID to a string.
std::string AutomationIdToString(const AutomationId& id);
// Converts the string to an automation ID and returns true on success.
bool StringToAutomationId(const std::string& string_id, AutomationId* id);
// Converts the web view ID to a string.
std::string WebViewIdToString(const WebViewId& view_id);
// Converts the string to a web view ID and returns true on success.
bool StringToWebViewId(const std::string& string_id, WebViewId* view_id);
// Flattens the given list of strings into one.
Error* FlattenStringArray(const ListValue* src, string16* dest);
#if defined(OS_MACOSX)
// Gets the paths to the user and local application directory.
void GetApplicationDirs(std::vector<FilePath>* app_dirs);
#endif
// Parses a given value.
class ValueParser {
public:
virtual ~ValueParser();
virtual bool Parse(base::Value* value) const = 0;
protected:
ValueParser();
private:
DISALLOW_COPY_AND_ASSIGN(ValueParser);
};
// Define a special type and constant that allows users to skip parsing a value.
// Useful when wanting to skip parsing for one value out of many in a list.
enum SkipParsing { };
extern SkipParsing* kSkipParsing;
// Parses a given value using the |ValueConversionTraits| to the appropriate
// type. This assumes that a direct conversion can be performed without
// pulling the value out of a dictionary or list.
template <typename T>
class DirectValueParser : public ValueParser {
public:
explicit DirectValueParser(T* t) : t_(t) { }
virtual ~DirectValueParser() { }
virtual bool Parse(base::Value* value) const OVERRIDE {
return ValueConversionTraits<T>::SetFromValue(value, t_);
}
private:
T* t_;
DISALLOW_COPY_AND_ASSIGN(DirectValueParser);
};
// Convenience function for creating a DirectValueParser.
template <typename T>
DirectValueParser<T>* CreateDirectValueParser(T* t) {
return new DirectValueParser<T>(t);
}
} // namespace webdriver
// Value conversion traits for SkipParsing, which just return true.
template <>
struct ValueConversionTraits<webdriver::SkipParsing> {
static bool SetFromValue(const base::Value* value,
const webdriver::SkipParsing* t);
static bool CanConvert(const base::Value* value);
};
#endif // CHROME_TEST_WEBDRIVER_WEBDRIVER_UTIL_H_
|