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

Side by Side Diff: chrome/browser/extensions/extension_record_api.h

Issue 10696144: Moving record API to api/record/ . (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 5 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
OLDNEW
(Empty)
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 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_RECORD_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_RECORD_API_H_
7 #pragma once
8
9 #include "chrome/browser/extensions/extension_function.h"
10 #include "base/command_line.h"
11 #include "base/file_path.h"
12 #include "base/time.h"
13
14 namespace {
15
16 const FilePath::CharType kURLErrorsSuffix[] = FILE_PATH_LITERAL(".errors");
17 const char kErrorsKey[] = "errors";
18 const char kStatsKey[] = "stats";
19
20 };
21
22 // ProcessStrategy abstracts the API's starting and waiting on a test
23 // browser instance. This lets us browser-test the API without actually
24 // firing up a sub browser instance.
25 class ProcessStrategy {
26 public:
27 // Needed to void build warnings
28 virtual ~ProcessStrategy();
29
30 // Used only in test version to pump the blocking pool queue,
31 // which doesn't otherwise happen during test.
32 virtual void PumpBlockingPool() {}
33
34 // Start up process with given commandline. Real version does just
35 // that; test version mocks it up, generating errors or good results,
36 // as configured. If there are any problems running the process itself,
37 // as opposed to errors in the cycler URL list, etc, report these via
38 // |errors|
39 virtual void RunProcess(const CommandLine& line,
40 std::vector<std::string> *errors) = 0;
41 };
42
43 // Production (default) version of ProcessStrategy. See ProcessStrategy
44 // comments for more info. This subclass actually starts a sub browser
45 // instance.
46 class ProductionProcessStrategy : public ProcessStrategy {
47 public:
48 virtual void RunProcess(const CommandLine& line,
49 std::vector<std::string> *errors) OVERRIDE;
50 };
51
52 // Both page cycler calls (capture and replay) have a great deal in common,
53 // including the need to build and write a url list file, set the user
54 // data dir, start a sub-instance of Chrome, and parse a resultant error
55 // file. This base class encapslates those common elements.
56 class RunPageCyclerFunction : public AsyncExtensionFunction {
57 public:
58 explicit RunPageCyclerFunction(ProcessStrategy* strategy);
59
60 // Make a CommandLine copy of |original|, removing all switches in
61 // |to_remove|.
62 static CommandLine RemoveSwitches(const CommandLine& original,
63 const std::vector<std::string>& to_remove);
64
65 // Return ProcessStrategy, to allow for test versions.
66 virtual const ProcessStrategy &GetProcessStrategy();
67
68 protected:
69 virtual ~RunPageCyclerFunction();
70
71 // Gather common page cycler parameters and store them, then do blocking
72 // thread invocation of RunTestBrowser.
73 virtual bool RunImpl() OVERRIDE;
74
75 // Parse the JS parameters, and store them as member data.
76 virtual bool ParseJSParameters() = 0;
77
78 // Do a vanilla test browser run, bracketing it immediately before and
79 // after with a call of AddSwitches to add special commandline options
80 // for Capture or Replay, and ReadReplyFiles to do any special post-run
81 // data collection. Gather any error results into |errors_| and then do a
82 // BrowserThread call of Finish to return JS values.
83 virtual void RunTestBrowser();
84 virtual void AddSwitches(CommandLine* command_line) {}
85
86 // The test browser communicates URL errors, performance statistics, and
87 // possibly other data by posting them to text files. ReadReplyFiles
88 // collects these data for return to the JS side caller.
89 virtual void ReadReplyFiles() {}
90
91 // Return the values gathered in RunTestBrowser. No common code here; all
92 // logic is in subclasses.
93 virtual void Finish() {}
94
95 FilePath user_data_dir_;
96 std::string url_contents_;
97 int repeat_count_;
98 std::vector<std::string> errors_;
99
100 // Base CommandLine on which to build the test browser CommandLine
101 CommandLine base_command_line_;
102
103 // ProcessStrategy to use for this run.
104 scoped_ptr<ProcessStrategy> process_strategy_;
105 };
106
107 class CaptureURLsFunction : public RunPageCyclerFunction {
108 public:
109 DECLARE_EXTENSION_FUNCTION_NAME("experimental.record.captureURLs");
110
111 CaptureURLsFunction();
112 explicit CaptureURLsFunction(ProcessStrategy* strategy);
113
114 private:
115 virtual ~CaptureURLsFunction() {}
116
117 // Read the ReplayDetails parameter if it exists.
118 virtual bool ParseJSParameters() OVERRIDE;
119
120 // Add record-mode.
121 virtual void AddSwitches(CommandLine* command_line) OVERRIDE;
122
123 // Return error list.
124 virtual void Finish() OVERRIDE;
125 };
126
127 class ReplayURLsFunction : public RunPageCyclerFunction {
128 public:
129 DECLARE_EXTENSION_FUNCTION_NAME("experimental.record.replayURLs");
130
131 ReplayURLsFunction();
132 explicit ReplayURLsFunction(ProcessStrategy* strategy);
133
134 private:
135 virtual ~ReplayURLsFunction();
136
137 // Read the ReplayDetails parameter if it exists.
138 virtual bool ParseJSParameters() OVERRIDE;
139
140 // Add visit-urls-count and load-extension.
141 virtual void AddSwitches(CommandLine* command_line) OVERRIDE;
142
143 // Read stats file.
144 virtual void ReadReplyFiles() OVERRIDE;
145
146 // Return error list, statistical results, and runtime.
147 virtual void Finish() OVERRIDE;
148
149 // These data are additional information added to the sub-browser
150 // commandline or used to repeatedly run the sub-browser.
151 FilePath extension_path_;
152 FilePath stats_file_path_;
153
154 // This time datum marks the start and end of the sub-browser run.
155 base::Time timer_;
156
157 // These two data are additional information returned to caller.
158 int run_time_ms_;
159 std::string stats_;
160 };
161
162 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_RECORD_API_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698