- Introduced Options::incognito_mode to make an on-the-fly incognito mode request.

- Added ConversionRequest::incognito_mode()
- Stop having incognito_config_ in EngineConverter.

PiperOrigin-RevId: 726384302
This commit is contained in:
Taku Kudo
2025-02-13 10:09:56 +00:00
committed by Hiroyuki Komatsu
parent aefddca40c
commit 4a65062698
10 changed files with 34 additions and 37 deletions

View File

@ -367,7 +367,7 @@ void UserDictionary::LookupPredictive(
if (tokens_->empty()) {
return;
}
if (conversion_request.config().incognito_mode()) {
if (conversion_request.incognito_mode()) {
return;
}
@ -413,7 +413,7 @@ void UserDictionary::LookupPrefix(absl::string_view key,
if (tokens_->empty()) {
return;
}
if (conversion_request.config().incognito_mode()) {
if (conversion_request.incognito_mode()) {
return;
}
@ -466,8 +466,7 @@ void UserDictionary::LookupExact(absl::string_view key,
const ConversionRequest &conversion_request,
Callback *callback) const {
absl::ReaderMutexLock l(&mutex_);
if (key.empty() || tokens_->empty() ||
conversion_request.config().incognito_mode()) {
if (key.empty() || tokens_->empty() || conversion_request.incognito_mode()) {
return;
}
auto [begin, end] =
@ -504,7 +503,7 @@ bool UserDictionary::LookupComment(absl::string_view key,
absl::string_view value,
const ConversionRequest &conversion_request,
std::string *comment) const {
if (key.empty() || conversion_request.config().incognito_mode()) {
if (key.empty() || conversion_request.incognito_mode()) {
return false;
}

View File

@ -463,16 +463,16 @@ bool EngineConverter::SuggestWithPreferences(
// The candidates are always from suggestion API
// as richer results are not needed.
if (request_->fill_incognito_candidate_words()) {
const Config &incognito_config = GetIncognitoConfig();
ConversionRequest::Options incognito_options = conversion_request.options();
incognito_options.enable_user_history_for_conversion = false;
incognito_options.request_type = use_partial_composition
? ConversionRequest::PARTIAL_SUGGESTION
: ConversionRequest::SUGGESTION;
incognito_options.incognito_mode = true;
const ConversionRequest incognito_conversion_request =
ConversionRequestBuilder()
.SetConversionRequest(conversion_request)
.SetConfig(incognito_config)
.SetConfig(*config_)
.SetOptions(std::move(incognito_options))
.Build();
incognito_segments_.Clear();
@ -1642,7 +1642,6 @@ void EngineConverter::SetConfig(const config::Config &config) {
updated_command_ = Segment::Candidate::DEFAULT_COMMAND;
selection_shortcut_ = config.selection_shortcut();
use_cascading_window_ = config.use_cascading_window();
incognito_config_.reset();
}
void EngineConverter::OnStartComposition(const commands::Context &context) {
@ -1778,15 +1777,5 @@ void EngineConverter::SetRequestType(
options.request_type = request_type;
}
const Config &EngineConverter::GetIncognitoConfig() {
if (!incognito_config_) {
// Initializes lazily. incognito_config_ is reset in SetConfig()
// method because *config_ is updated in SetConfig().
incognito_config_ = std::make_unique<Config>(*config_);
incognito_config_->set_incognito_mode(true);
}
return *incognito_config_;
}
} // namespace engine
} // namespace mozc

View File

@ -358,10 +358,6 @@ class EngineConverter : public EngineConverterInterface {
void SetRequestType(ConversionRequest::RequestType request_type,
ConversionRequest::Options &options);
// Gets a config for incognito mode from the current config.
// `incognito_config_` is lazily initialized.
const config::Config &GetIncognitoConfig();
const ConverterInterface *converter_ = nullptr;
// Conversion stats used by converter_.
Segments segments_;
@ -384,7 +380,6 @@ class EngineConverter : public EngineConverterInterface {
const commands::Request *request_ = nullptr;
const config::Config *config_ = nullptr;
std::unique_ptr<config::Config> incognito_config_;
EngineConverterInterface::State state_;

View File

@ -76,6 +76,7 @@ using ::mozc::commands::Request;
using ::mozc::config::Config;
using ::testing::_;
using ::testing::DoAll;
using ::testing::Eq;
using ::testing::Mock;
using ::testing::Pointee;
using ::testing::Property;
@ -2191,8 +2192,7 @@ TEST_F(EngineConverterTest, SuggestFillIncognitoCandidateWords) {
// A matcher to test if the given conversion request sets incognito_mode().
constexpr auto IsIncognitoConversionRequest = [](bool is_incognito) {
return Property(&ConversionRequest::config,
Property(&Config::incognito_mode, is_incognito));
return Property(&ConversionRequest::incognito_mode, Eq(is_incognito));
};
{
request_->set_fill_incognito_candidate_words(false);

View File

@ -1232,7 +1232,7 @@ bool UserHistoryPredictor::ShouldPredict(RequestType request_type,
return false;
}
if (request.config().incognito_mode()) {
if (request.incognito_mode()) {
MOZC_VLOG(2) << "incognito mode";
return false;
}
@ -1883,7 +1883,7 @@ void UserHistoryPredictor::Finish(const ConversionRequest &request,
return;
}
if (request.config().incognito_mode()) {
if (request.incognito_mode()) {
MOZC_VLOG(2) << "incognito mode";
return;
}

View File

@ -87,6 +87,9 @@ message Config {
// Incognito mode:
// Disable all mutable operation if incognito_mode is true
// Clients needs to check ConversionRequest::incognito_mode() instead
// of Config::incognito_mode(), as the incoginto mode can also set
// via Options.
optional bool incognito_mode = 20 [default = false];
reserved 21;

View File

@ -120,6 +120,11 @@ class ConversionRequest {
// If true, use conversion_segment(0).key() instead of ComposerData.
// TODO(b/365909808): Create a new string field to store the key.
bool use_already_typing_corrected_key = false;
// Enables incognito mode even when Config.incognito_mode() is false.
// Use this flag to dynamically change the incognito_mode per client
// request.
bool incognito_mode = false;
};
ConversionRequest()
@ -245,6 +250,13 @@ class ConversionRequest {
return options_.use_already_typing_corrected_key;
}
// Clients needs to check ConversionRequest::incognito_mode() instead
// of Config::incognito_mode(), as the incoginto mode can also set
// via Options.
bool incognito_mode() const {
return options_.incognito_mode || config_.incognito_mode();
}
absl::string_view key() const { return options_.key; }
private:

View File

@ -169,8 +169,8 @@ std::vector<RewriteCandidateInfo> GetRewriteCandidateInfos(
// Use the higher ranked candidate for deciding the insertion position.
absl::flat_hash_set<std::string> seen;
for (size_t i = 0; i < seg.candidates_size(); ++i) {
std::optional<RewriteCandidateInfo> info = GetRewriteCandidateInfo(
suffix_array, seg, i, pos_matcher);
std::optional<RewriteCandidateInfo> info =
GetRewriteCandidateInfo(suffix_array, seg, i, pos_matcher);
if (!info.has_value()) {
continue;
}
@ -300,9 +300,8 @@ void FindEraseCandidates(absl::Span<const Segment::Candidate> results,
int base_candidate_pos, RewriteType type,
const Segment &seg, std::set<int> *erase_positions) {
// Remember base candidate value
const int start_pos =
std::min<int>(base_candidate_pos + GetInsertOffset(type),
seg.candidates_size() - 1);
const int start_pos = std::min<int>(
base_candidate_pos + GetInsertOffset(type), seg.candidates_size() - 1);
for (int pos = start_pos; pos >= 0; --pos) {
if (pos == base_candidate_pos) {
continue;
@ -596,7 +595,7 @@ bool NumberRewriter::ShouldRerankCandidates(const ConversionRequest &request,
MOZC_VLOG(2) << "number style learning is not enabled.";
return false;
}
if (request.config().incognito_mode()) {
if (request.incognito_mode()) {
MOZC_VLOG(2) << "incognito mode";
return false;
}
@ -653,7 +652,7 @@ void NumberRewriter::Finish(const ConversionRequest &request,
return;
}
if (request.config().incognito_mode()) {
if (request.incognito_mode()) {
MOZC_VLOG(2) << "incognito_mode";
return;
}

View File

@ -173,7 +173,7 @@ void UserBoundaryHistoryRewriter::Finish(const ConversionRequest &request,
return;
}
if (request.config().incognito_mode()) {
if (request.incognito_mode()) {
MOZC_VLOG(2) << "incognito mode";
return;
}
@ -201,7 +201,7 @@ UserBoundaryHistoryRewriter::CheckResizeSegmentsRequest(
return std::nullopt;
}
if (request.config().incognito_mode()) {
if (request.incognito_mode()) {
MOZC_VLOG(2) << "incognito mode";
return std::nullopt;
}

View File

@ -711,7 +711,7 @@ void UserSegmentHistoryRewriter::RememberFirstCandidate(
bool UserSegmentHistoryRewriter::IsAvailable(const ConversionRequest &request,
const Segments &segments) const {
if (request.config().incognito_mode()) {
if (request.incognito_mode()) {
MOZC_VLOG(2) << "incognito_mode";
return false;
}