| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/translate/core/browser/translate_ranker_impl.h" | 5 #include "components/translate/core/browser/translate_ranker_impl.h" |
| 6 | 6 |
| 7 #include <initializer_list> | 7 #include <initializer_list> |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/feature_list.h" | 10 #include "base/feature_list.h" |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 // If we don't have a model, returns true. | 312 // If we don't have a model, returns true. |
| 313 EXPECT_TRUE(ranker->ShouldOfferTranslation(&translate_event)); | 313 EXPECT_TRUE(ranker->ShouldOfferTranslation(&translate_event)); |
| 314 EXPECT_NE(0U, translate_event.ranker_request_timestamp_sec()); | 314 EXPECT_NE(0U, translate_event.ranker_request_timestamp_sec()); |
| 315 EXPECT_EQ(0U, translate_event.ranker_version()); | 315 EXPECT_EQ(0U, translate_event.ranker_version()); |
| 316 EXPECT_EQ(metrics::TranslateEventProto::NOT_QUERIED, | 316 EXPECT_EQ(metrics::TranslateEventProto::NOT_QUERIED, |
| 317 translate_event.ranker_response()); | 317 translate_event.ranker_response()); |
| 318 } | 318 } |
| 319 | 319 |
| 320 TEST_F(TranslateRankerImplTest, RecordAndFlushEvents) { | 320 TEST_F(TranslateRankerImplTest, RecordAndFlushEvents) { |
| 321 std::unique_ptr<translate::TranslateRanker> ranker = GetRankerForTest(0.0f); | 321 std::unique_ptr<translate::TranslateRanker> ranker = GetRankerForTest(0.0f); |
| 322 ranker->EnableLogging(true); |
| 322 std::vector<metrics::TranslateEventProto> flushed_events; | 323 std::vector<metrics::TranslateEventProto> flushed_events; |
| 323 | 324 |
| 324 GURL url0("https://www.google.com"); | 325 GURL url0("https://www.google.com"); |
| 325 GURL url1("https://www.gmail.com"); | 326 GURL url1("https://www.gmail.com"); |
| 326 | 327 |
| 327 // Check that flushing an empty cache will return an empty vector. | 328 // Check that flushing an empty cache will return an empty vector. |
| 328 ranker->FlushTranslateEvents(&flushed_events); | 329 ranker->FlushTranslateEvents(&flushed_events); |
| 329 EXPECT_EQ(0U, flushed_events.size()); | 330 EXPECT_EQ(0U, flushed_events.size()); |
| 330 | 331 |
| 331 ranker->RecordTranslateEvent(0, url0, &translate_event1_); | 332 ranker->RecordTranslateEvent(0, url0, &translate_event1_); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 351 | 352 |
| 352 ASSERT_EQ(2U, GetTestUkmRecorder()->sources_count()); | 353 ASSERT_EQ(2U, GetTestUkmRecorder()->sources_count()); |
| 353 EXPECT_EQ( | 354 EXPECT_EQ( |
| 354 url0.spec(), | 355 url0.spec(), |
| 355 GetTestUkmRecorder()->GetSourceForUrl(url0.spec().c_str())->url().spec()); | 356 GetTestUkmRecorder()->GetSourceForUrl(url0.spec().c_str())->url().spec()); |
| 356 EXPECT_EQ( | 357 EXPECT_EQ( |
| 357 url1.spec(), | 358 url1.spec(), |
| 358 GetTestUkmRecorder()->GetSourceForUrl(url1.spec().c_str())->url().spec()); | 359 GetTestUkmRecorder()->GetSourceForUrl(url1.spec().c_str())->url().spec()); |
| 359 } | 360 } |
| 360 | 361 |
| 361 TEST_F(TranslateRankerImplTest, LoggingDisabledViaOverride) { | 362 TEST_F(TranslateRankerImplTest, EnableLogging) { |
| 362 std::unique_ptr<translate::TranslateRankerImpl> ranker = | 363 std::unique_ptr<translate::TranslateRankerImpl> ranker = |
| 363 GetRankerForTest(0.0f); | 364 GetRankerForTest(0.0f); |
| 364 std::vector<metrics::TranslateEventProto> flushed_events; | 365 std::vector<metrics::TranslateEventProto> flushed_events; |
| 365 | 366 |
| 367 // Logging is disabled by default. No events will be cached. |
| 368 ranker->RecordTranslateEvent(0, GURL(), &translate_event1_); |
| 369 ranker->RecordTranslateEvent(1, GURL(), &translate_event2_); |
| 370 |
| 366 ranker->FlushTranslateEvents(&flushed_events); | 371 ranker->FlushTranslateEvents(&flushed_events); |
| 367 EXPECT_EQ(0U, flushed_events.size()); | 372 EXPECT_EQ(0U, flushed_events.size()); |
| 368 | 373 |
| 374 // Once we enable logging, events will be cached. |
| 375 ranker->EnableLogging(true); |
| 369 ranker->RecordTranslateEvent(0, GURL(), &translate_event1_); | 376 ranker->RecordTranslateEvent(0, GURL(), &translate_event1_); |
| 370 ranker->RecordTranslateEvent(1, GURL(), &translate_event2_); | 377 ranker->RecordTranslateEvent(1, GURL(), &translate_event2_); |
| 371 ranker->RecordTranslateEvent(2, GURL(), &translate_event3_); | |
| 372 | 378 |
| 373 // Logging is enabled by default, so events should be cached. | |
| 374 ranker->FlushTranslateEvents(&flushed_events); | 379 ranker->FlushTranslateEvents(&flushed_events); |
| 375 EXPECT_EQ(3U, flushed_events.size()); | 380 EXPECT_EQ(2U, flushed_events.size()); |
| 381 flushed_events.clear(); |
| 376 | 382 |
| 377 // Override the feature setting to disable logging. | 383 // Turning logging back off, caching is disabled once again. |
| 378 ranker->EnableLogging(false); | 384 ranker->EnableLogging(false); |
| 379 | |
| 380 ranker->RecordTranslateEvent(0, GURL(), &translate_event1_); | 385 ranker->RecordTranslateEvent(0, GURL(), &translate_event1_); |
| 381 ranker->RecordTranslateEvent(1, GURL(), &translate_event2_); | 386 ranker->RecordTranslateEvent(1, GURL(), &translate_event2_); |
| 382 ranker->RecordTranslateEvent(2, GURL(), &translate_event3_); | |
| 383 | 387 |
| 384 // Logging is disabled, so no events should be cached. | 388 // Logging is disabled, so no events should be cached. |
| 385 ranker->FlushTranslateEvents(&flushed_events); | 389 ranker->FlushTranslateEvents(&flushed_events); |
| 386 EXPECT_EQ(0U, flushed_events.size()); | 390 EXPECT_EQ(0U, flushed_events.size()); |
| 387 } | 391 } |
| 388 | 392 |
| 393 TEST_F(TranslateRankerImplTest, EnableLoggingClearsCache) { |
| 394 std::unique_ptr<translate::TranslateRankerImpl> ranker = |
| 395 GetRankerForTest(0.0f); |
| 396 std::vector<metrics::TranslateEventProto> flushed_events; |
| 397 // Logging is disabled by default. No events will be cached. |
| 398 ranker->RecordTranslateEvent(0, GURL(), &translate_event1_); |
| 399 // Making sure that cache is still empty once logging is turned on. |
| 400 ranker->EnableLogging(true); |
| 401 ranker->FlushTranslateEvents(&flushed_events); |
| 402 EXPECT_EQ(0U, flushed_events.size()); |
| 403 |
| 404 // These events will be cached. |
| 405 ranker->RecordTranslateEvent(0, GURL(), &translate_event1_); |
| 406 ranker->RecordTranslateEvent(1, GURL(), &translate_event2_); |
| 407 // Cache will not be cleared if the logging state does not change. |
| 408 ranker->EnableLogging(true); |
| 409 ranker->FlushTranslateEvents(&flushed_events); |
| 410 EXPECT_EQ(2U, flushed_events.size()); |
| 411 flushed_events.clear(); |
| 412 // Cache is now empty after being flushed. |
| 413 ranker->FlushTranslateEvents(&flushed_events); |
| 414 EXPECT_EQ(0U, flushed_events.size()); |
| 415 |
| 416 // Filling cache again. |
| 417 ranker->EnableLogging(true); |
| 418 ranker->RecordTranslateEvent(0, GURL(), &translate_event1_); |
| 419 ranker->RecordTranslateEvent(1, GURL(), &translate_event2_); |
| 420 // Switching logging off will clear the cache. |
| 421 ranker->EnableLogging(false); |
| 422 ranker->FlushTranslateEvents(&flushed_events); |
| 423 EXPECT_EQ(0U, flushed_events.size()); |
| 424 |
| 425 // Filling cache again. |
| 426 ranker->EnableLogging(true); |
| 427 ranker->RecordTranslateEvent(0, GURL(), &translate_event1_); |
| 428 ranker->RecordTranslateEvent(1, GURL(), &translate_event2_); |
| 429 // Switching logging off and on again will clear the cache. |
| 430 ranker->EnableLogging(false); |
| 431 ranker->EnableLogging(true); |
| 432 ranker->FlushTranslateEvents(&flushed_events); |
| 433 EXPECT_EQ(0U, flushed_events.size()); |
| 434 } |
| 435 |
| 389 TEST_F(TranslateRankerImplTest, ShouldOverrideDecision_OverrideDisabled) { | 436 TEST_F(TranslateRankerImplTest, ShouldOverrideDecision_OverrideDisabled) { |
| 390 InitFeatures({}, {kTranslateRankerDecisionOverride}); | 437 InitFeatures({}, {kTranslateRankerDecisionOverride}); |
| 391 std::unique_ptr<translate::TranslateRankerImpl> ranker = | 438 std::unique_ptr<translate::TranslateRankerImpl> ranker = |
| 392 GetRankerForTest(0.0f); | 439 GetRankerForTest(0.0f); |
| 440 ranker->EnableLogging(true); |
| 393 const int kEventType = 12; | 441 const int kEventType = 12; |
| 394 metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); | 442 metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); |
| 395 | 443 |
| 396 EXPECT_FALSE( | 444 EXPECT_FALSE( |
| 397 ranker->ShouldOverrideDecision(kEventType, GURL(), &translate_event)); | 445 ranker->ShouldOverrideDecision(kEventType, GURL(), &translate_event)); |
| 398 | 446 |
| 399 std::vector<metrics::TranslateEventProto> flushed_events; | 447 std::vector<metrics::TranslateEventProto> flushed_events; |
| 400 ranker->FlushTranslateEvents(&flushed_events); | 448 ranker->FlushTranslateEvents(&flushed_events); |
| 401 EXPECT_EQ(1U, flushed_events.size()); | 449 EXPECT_EQ(1U, flushed_events.size()); |
| 402 ASSERT_EQ(translate_event.source_language(), | 450 ASSERT_EQ(translate_event.source_language(), |
| 403 flushed_events[0].source_language()); | 451 flushed_events[0].source_language()); |
| 404 ASSERT_EQ(kEventType, flushed_events[0].event_type()); | 452 ASSERT_EQ(kEventType, flushed_events[0].event_type()); |
| 405 } | 453 } |
| 406 | 454 |
| 407 TEST_F(TranslateRankerImplTest, ShouldOverrideDecision_OverrideEnabled) { | 455 TEST_F(TranslateRankerImplTest, ShouldOverrideDecision_OverrideEnabled) { |
| 408 InitFeatures({kTranslateRankerDecisionOverride}, | 456 InitFeatures({kTranslateRankerDecisionOverride}, |
| 409 {kTranslateRankerQuery, kTranslateRankerEnforcement}); | 457 {kTranslateRankerQuery, kTranslateRankerEnforcement}); |
| 410 std::unique_ptr<translate::TranslateRankerImpl> ranker = | 458 std::unique_ptr<translate::TranslateRankerImpl> ranker = |
| 411 GetRankerForTest(0.0f); | 459 GetRankerForTest(0.0f); |
| 460 ranker->EnableLogging(true); |
| 412 metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); | 461 metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); |
| 413 // DecisionOverride is decoupled from querying and enforcement. Enabling | 462 // DecisionOverride is decoupled from querying and enforcement. Enabling |
| 414 // only DecisionOverride will not query the Ranker. Ranker returns its default | 463 // only DecisionOverride will not query the Ranker. Ranker returns its default |
| 415 // response. | 464 // response. |
| 416 EXPECT_TRUE( | 465 EXPECT_TRUE( |
| 417 GetRankerForTest(0.99f)->ShouldOfferTranslation(&translate_event)); | 466 GetRankerForTest(0.99f)->ShouldOfferTranslation(&translate_event)); |
| 418 EXPECT_TRUE(ranker->ShouldOverrideDecision(1, GURL(), &translate_event)); | 467 EXPECT_TRUE(ranker->ShouldOverrideDecision(1, GURL(), &translate_event)); |
| 419 EXPECT_TRUE(ranker->ShouldOverrideDecision(2, GURL(), &translate_event)); | 468 EXPECT_TRUE(ranker->ShouldOverrideDecision(2, GURL(), &translate_event)); |
| 420 | 469 |
| 421 std::vector<metrics::TranslateEventProto> flushed_events; | 470 std::vector<metrics::TranslateEventProto> flushed_events; |
| 422 ranker->FlushTranslateEvents(&flushed_events); | 471 ranker->FlushTranslateEvents(&flushed_events); |
| 423 EXPECT_EQ(0U, flushed_events.size()); | 472 EXPECT_EQ(0U, flushed_events.size()); |
| 424 ASSERT_EQ(2, translate_event.decision_overrides_size()); | 473 ASSERT_EQ(2, translate_event.decision_overrides_size()); |
| 425 ASSERT_EQ(1, translate_event.decision_overrides(0)); | 474 ASSERT_EQ(1, translate_event.decision_overrides(0)); |
| 426 ASSERT_EQ(2, translate_event.decision_overrides(1)); | 475 ASSERT_EQ(2, translate_event.decision_overrides(1)); |
| 427 ASSERT_EQ(0, translate_event.event_type()); | 476 ASSERT_EQ(0, translate_event.event_type()); |
| 428 EXPECT_EQ(metrics::TranslateEventProto::NOT_QUERIED, | 477 EXPECT_EQ(metrics::TranslateEventProto::NOT_QUERIED, |
| 429 translate_event.ranker_response()); | 478 translate_event.ranker_response()); |
| 430 } | 479 } |
| 431 | 480 |
| 432 TEST_F(TranslateRankerImplTest, | 481 TEST_F(TranslateRankerImplTest, |
| 433 ShouldOverrideDecision_OverrideAndQueryEnabled) { | 482 ShouldOverrideDecision_OverrideAndQueryEnabled) { |
| 434 InitFeatures({kTranslateRankerDecisionOverride, kTranslateRankerQuery}, | 483 InitFeatures({kTranslateRankerDecisionOverride, kTranslateRankerQuery}, |
| 435 {kTranslateRankerEnforcement}); | 484 {kTranslateRankerEnforcement}); |
| 436 // This test checks that translate events are properly logged when ranker is | 485 // This test checks that translate events are properly logged when ranker is |
| 437 // queried and a decision is overridden. | 486 // queried and a decision is overridden. |
| 438 std::unique_ptr<translate::TranslateRankerImpl> ranker = | 487 std::unique_ptr<translate::TranslateRankerImpl> ranker = |
| 439 GetRankerForTest(0.0f); | 488 GetRankerForTest(0.0f); |
| 489 ranker->EnableLogging(true); |
| 440 metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); | 490 metrics::TranslateEventProto translate_event = CreateDefaultTranslateEvent(); |
| 441 // Ranker's decision is DONT_SHOW, but we are in query mode only, so Ranker | 491 // Ranker's decision is DONT_SHOW, but we are in query mode only, so Ranker |
| 442 // does not suppress the UI. | 492 // does not suppress the UI. |
| 443 EXPECT_TRUE( | 493 EXPECT_TRUE( |
| 444 GetRankerForTest(0.99f)->ShouldOfferTranslation(&translate_event)); | 494 GetRankerForTest(0.99f)->ShouldOfferTranslation(&translate_event)); |
| 445 | 495 |
| 446 int kOverrideType = 1; | 496 int kOverrideType = 1; |
| 447 EXPECT_TRUE( | 497 EXPECT_TRUE( |
| 448 ranker->ShouldOverrideDecision(kOverrideType, GURL(), &translate_event)); | 498 ranker->ShouldOverrideDecision(kOverrideType, GURL(), &translate_event)); |
| 449 | 499 |
| 450 int kEventType = 5; | 500 int kEventType = 5; |
| 451 ranker->RecordTranslateEvent(kEventType, GURL(), &translate_event); | 501 ranker->RecordTranslateEvent(kEventType, GURL(), &translate_event); |
| 452 std::vector<metrics::TranslateEventProto> flushed_events; | 502 std::vector<metrics::TranslateEventProto> flushed_events; |
| 453 ranker->FlushTranslateEvents(&flushed_events); | 503 ranker->FlushTranslateEvents(&flushed_events); |
| 454 | 504 |
| 455 EXPECT_EQ(1U, flushed_events.size()); | 505 EXPECT_EQ(1U, flushed_events.size()); |
| 456 ASSERT_EQ(1, flushed_events[0].decision_overrides_size()); | 506 ASSERT_EQ(1, flushed_events[0].decision_overrides_size()); |
| 457 ASSERT_EQ(kOverrideType, flushed_events[0].decision_overrides(0)); | 507 ASSERT_EQ(kOverrideType, flushed_events[0].decision_overrides(0)); |
| 458 ASSERT_EQ(kEventType, flushed_events[0].event_type()); | 508 ASSERT_EQ(kEventType, flushed_events[0].event_type()); |
| 459 EXPECT_EQ(metrics::TranslateEventProto::DONT_SHOW, | 509 EXPECT_EQ(metrics::TranslateEventProto::DONT_SHOW, |
| 460 flushed_events[0].ranker_response()); | 510 flushed_events[0].ranker_response()); |
| 461 } | 511 } |
| OLD | NEW |