mirror of
https://github.com/mii443/mozc.git
synced 2025-08-22 16:15:46 +00:00
- 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:
committed by
Hiroyuki Komatsu
parent
aefddca40c
commit
4a65062698
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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_;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user