blob: b8dd4e7c7116b815d4ad2db194cab9a35ba2c3c2 [file] [log] [blame]
// Copyright 2013 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.
// Use the <code>chrome.feedbackPrivate</code> API to provide Chrome [OS]
// feedback to the Google Feedback servers.
namespace feedbackPrivate {
dictionary AttachedFile {
DOMString name;
[instanceOf=Blob] object? data;
};
dictionary SystemInformation {
DOMString key;
DOMString value;
};
// Supported feedback flows.
enum FeedbackFlow {
// Flow for regular user. This is the default.
regular,
// Flow on the ChromeOS login screen. URL entry, file attaching and landing
// page is disabled for this flow.
login,
// Flow when the feedback is requested from the sad tab ("Aw, Snap!") page
// when the renderer crashes.
sadTabCrash,
// Flow for internal Google users.
googleInternal
};
dictionary FeedbackInfo {
// File to attach to the feedback report.
AttachedFile? attachedFile;
// An optional tag to label what type this feedback is.
DOMString? categoryTag;
// The feedback text describing the user issue.
DOMString description;
// The placeholder text that will be shown in the description field when
// it's empty.
DOMString? descriptionPlaceholder;
// The e-mail of the user that initiated this feedback.
DOMString? email;
// The URL of the page that this issue was being experienced on.
DOMString? pageUrl;
// Optional product ID to override the Chrome [OS] product id that is
// usually passed to the feedback server.
long? productId;
// Screenshot to send with this feedback.
[instanceOf=Blob] object? screenshot;
// Optional id for performance trace data that can be included in this
// report.
long? traceId;
// An array of key/value pairs providing system information for this
// feedback report.
SystemInformation[]? systemInformation;
// True if we have permission to add histograms to this feedback report.
boolean? sendHistograms;
// Optional feedback UI flow. Default is the regular user flow.
FeedbackFlow? flow;
// TODO(rkc): Remove these once we have bindings to send blobs to Chrome.
// Used internally to store the blob uuid after parameter customization.
DOMString? attachedFileBlobUuid;
DOMString? screenshotBlobUuid;
// Whether to use the system-provided window frame or custom frame controls.
boolean? useSystemWindowFrame;
// Whether or not to send bluetooth logs with this report.
boolean? sendBluetoothLogs;
// Whether or not to send tab titles with this report.
boolean? sendTabTitles;
// Whether or not to send Assistant feedback to Assistant server.
boolean? assistantDebugInfoAllowed;
// Whether or not triggered from Assistant.
boolean? fromAssistant;
// Whether or not to include bluetooth logs.
boolean? includeBluetoothLogs;
// Whether to show questionnaire in the report description based on detected
// domain-related keywords (crbug/1241169).
boolean? showQuestionnaire;
};
// Status of the sending of a feedback report.
enum Status {success, delayed};
// The type of the landing page shown to the user when the feedback report is
// successfully sent, if one should be shown.
enum LandingPageType {normal, techstop, noLandingPage};
// Allowed log sources on Chrome OS.
enum LogSource {
// Chrome OS system messages.
messages,
// Latest Chrome OS UI logs.
uiLatest,
// Info about display connectors and connected displays from DRM subsystem.
drmModetest,
// USB device list and connectivity graph.
lsusb,
// Logs from daemon for Atrus device.
atrusLog,
// Network log.
netLog,
// Log of system events.
eventLog,
// Update engine log.
updateEngineLog,
// Log of the current power manager session.
powerdLatest,
// Log of the previous power manager session.
powerdPrevious,
// Info about system PCI buses devices.
lspci,
// Info about system network interface.
ifconfig,
// Info about system uptime.
uptime
};
// Input parameters for a readLogSource() call.
dictionary ReadLogSourceParams {
// The log source from which to read.
LogSource source;
// For file-based log sources, read from source without closing the file
// handle. The next time $(ref:readLogSource) is called, the file read will
// continue where it left off. $(ref:readLogSource) can be called with
// <code>incremental=true</code> repeatedly. To subsequently close the file
// handle, pass in <code>incremental=false</code>.
boolean incremental;
// To read from an existing file handle, set this to a valid
// <code>readerId</code> value that was returned from a previous
// $(ref:readLogSource) call. The reader must previously have been created
// for the same value of <code>source</code>. If no <code>readerId</code> is
// provided, $(ref:readLogSource) will attempt to open a new log source
// reader handle.
long? readerId;
};
// Result returned from a $(ref:readLogSource) call.
dictionary ReadLogSourceResult {
// The ID of the log source reader that was created to read from the log
// source. If the reader was destroyed at the end of a read by passing in
// <code>incremental=false</code>, this is always set to 0. If the call was
// to use an existing reader with an existing ID, this will be set to the
// same <code>readerId</code> that was passed into $(ref:readLogSource).
long readerId;
// Each DOMString in this array represents one line of logging that was
// fetched from the log source.
DOMString[] logLines;
};
callback GetUserEmailCallback = void(DOMString email);
callback GetSystemInformationCallback =
void(SystemInformation[] systemInformation);
callback SendFeedbackCallback = void(Status status, LandingPageType type);
callback GetStringsCallback = void(object result);
callback ReadLogSourceCallback = void (ReadLogSourceResult result);
interface Functions {
// Returns the email of the currently active or logged in user.
static void getUserEmail(GetUserEmailCallback callback);
// Returns the system information dictionary.
static void getSystemInformation(GetSystemInformationCallback callback);
// Sends a feedback report.
// |loadSystemInfo|: Optional flag when present and is true, the backend
// should load system information before sending the report. This is added
// to reduce user's wait time when sending reports because loading system
// information is slow.
// |formOpenTime|: The epoch time when the feedback form was opened. This is
// used for metrics.
static void sendFeedback(FeedbackInfo feedback,
optional boolean loadSystemInfo,
optional double formOpenTime,
SendFeedbackCallback callback);
// Gets localized translated strings for feedback. It returns the
// strings as a dictionary mapping from string identifier to the
// translated string to use in the feedback app UI.
static void getStrings(FeedbackFlow flow, GetStringsCallback callback);
// Reads from a log source indicated by <code>source</code>.
// <p>If <code>incremental</code> is false:
// <ul>
// <li>Returns the entire contents of the log file.</li>
// <li>Returns <code>readerId</code> value of 0 to callback.</li>
// </ul>
// If <code>incremental</code> is true, and no <code>readerId</code> is
// provided:
// <ul>
// <li>Returns the entire contents of the log file.</li>
// <li>Starts tracking the file read handle, which is returned as a
// nonzero <code>readerId</code> value in the callback.
// </li>
// <li>If can't create a new file handle, returns <code>readerId</code>
// value of 0 in the callback.
// </li>
// </ul>
// If <code>incremental</code> is true, and a valid non-zero
// <code>readerId</code> is provided:
// <ul>
// <li>Returns new lines written to the file since the last time this
// function was called for the same file and <code>readerId</code>.
// </li>
// <li>Returns the same <code>readerId</code> value to the callback.</li>
// </ul>
static void readLogSource(ReadLogSourceParams params,
ReadLogSourceCallback callback);
// Invoked when the extension is complete during sending feedback from the
// login page. This is then used to know we can unload the feedback
// extension from the login profile.
static void loginFeedbackComplete();
};
interface Events {
// Fired when the a user requests the launch of the feedback UI. We're
// using an event for this versus using the override API since we want
// to be invoked, but not showing a UI, so the feedback extension can
// take a screenshot of the user's desktop.
static void onFeedbackRequested(FeedbackInfo feedback);
};
};