mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-04 18:29:29 +02:00
Instead of passing potentially-dynamic strings over the IPDL interface, pass an integer which corresponds to one of a fixed set of static strings. (This is basically an enum with more steps -- or with fewer steps, depending on which side of it you're standing on.) This ensures that the set of possible location-strings is fixed, which in turn both ensures that aggregation of telemetry stays relatively simple and guards against accidental leakage of PII thereinto. (Or, alternatively and equivalently, this minimizes the code region that data-review needs to consider once the location string is reported to telemetry.) Note that we do not yet actually report the location-string via telemetry; that's planned to occur in bug 1884221. Differential Revision: https://phabricator.services.mozilla.com/D205169
62 lines
2.2 KiB
Text
62 lines
2.2 KiB
Text
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set sw=2 ts=8 et ft=ipdl : */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
namespace mozilla {
|
|
namespace widget {
|
|
namespace filedialog {
|
|
|
|
// Commands corresponding to the various functions in IFileDialog (or at least
|
|
// the ones we actually make use of).
|
|
//
|
|
// All commands' semantics are direct parallels of their equivalently-named
|
|
// functions on IFileDialog, with the only changes being those necessary to use
|
|
// IPDLable representation-datatypes. (Thus, e.g., `SetOptions` effectively
|
|
// takes a `FILEOPENDIALOGOPTIONS`, and `SetFileTypeIndex` is 1-based.)
|
|
struct SetOptions { uint32_t options; };
|
|
struct SetTitle { nsString title; };
|
|
struct SetOkButtonLabel { nsString label; };
|
|
struct SetFolder { nsString path; };
|
|
struct SetFileName { nsString filename; };
|
|
struct SetDefaultExtension { nsString extension; };
|
|
struct ComDlgFilterSpec { nsString name; nsString spec; };
|
|
struct SetFileTypes { ComDlgFilterSpec[] filterList; };
|
|
struct SetFileTypeIndex { uint32_t index; };
|
|
|
|
// Union of the above.
|
|
union Command {
|
|
SetOptions;
|
|
SetTitle;
|
|
SetOkButtonLabel;
|
|
SetFolder;
|
|
SetFileName;
|
|
SetDefaultExtension;
|
|
SetFileTypes;
|
|
SetFileTypeIndex;
|
|
};
|
|
|
|
// The results from opening a file dialog. (Note that folder selection only
|
|
// returns an nsString.)
|
|
struct Results {
|
|
nsString[] paths;
|
|
uint32_t selectedFileTypeIndex;
|
|
};
|
|
|
|
// Homolog of filedialog::Err. (Always Err::Kind::RemoteError, by definition.)
|
|
struct RemoteError {
|
|
// An enum (`filedialog::Error::Location`) describing the compile-time location
|
|
// where the error was detected.
|
|
//
|
|
// (This value is validated at use-sites; if the child process sends a bad
|
|
// value, nothing of import will happen.)
|
|
uint32_t where;
|
|
// An error code describing the error itself more precisely. Its semantics
|
|
// depend on the context provided by `where`, but it's probably an HRESULT.
|
|
uint32_t why;
|
|
};
|
|
|
|
} // namespace filedialog
|
|
} // namespace widget
|
|
} // namespace mozilla
|