| Index: chrome/browser/browsing_data/browsing_data_important_sites_util.cc | 
| diff --git a/chrome/browser/browsing_data/browsing_data_important_sites_util.cc b/chrome/browser/browsing_data/browsing_data_important_sites_util.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..a0907856024b6a76f2df9f1a6d01c7370e5718e2 | 
| --- /dev/null | 
| +++ b/chrome/browser/browsing_data/browsing_data_important_sites_util.cc | 
| @@ -0,0 +1,45 @@ | 
| +// Copyright 2017 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. | 
| + | 
| +#include "chrome/browser/browsing_data/browsing_data_important_sites_util.h" | 
| + | 
| +#include "content/public/browser/browsing_data_filter_builder.h" | 
| + | 
| +namespace browsing_data_important_sites_util { | 
| + | 
| +void Remove(int remove_mask, | 
| +            int origin_mask, | 
| +            browsing_data::TimePeriod time_period, | 
| +            std::unique_ptr<content::BrowsingDataFilterBuilder> filter_builder, | 
| +            BrowsingDataRemover* remover, | 
| +            BrowsingDataRemover::Observer* observer) { | 
| +  int filterable_mask = | 
| +      remove_mask & BrowsingDataRemover::IMPORTANT_SITES_DATATYPES; | 
| +  int nonfilterable_mask = | 
| +      remove_mask & ~BrowsingDataRemover::IMPORTANT_SITES_DATATYPES; | 
| + | 
| +  browsing_data::RecordDeletionForPeriod(time_period); | 
| + | 
| +  if (filterable_mask) { | 
| +    remover->RemoveWithFilterAndReply( | 
| +        browsing_data::CalculateBeginDeleteTime(time_period), | 
| +        browsing_data::CalculateEndDeleteTime(time_period), filterable_mask, | 
| +        origin_mask, std::move(filter_builder), observer); | 
| +  } else { | 
| +    // Make sure |observer| doesn't wait for the filtered task. | 
| +    observer->OnBrowsingDataRemoverDone(); | 
| +  } | 
| + | 
| +  if (nonfilterable_mask) { | 
| +    remover->RemoveAndReply( | 
| +        browsing_data::CalculateBeginDeleteTime(time_period), | 
| +        browsing_data::CalculateEndDeleteTime(time_period), nonfilterable_mask, | 
| +        origin_mask, observer); | 
| +  } else { | 
| +    // Make sure |observer| doesn't wait for the non-filtered task. | 
| +    observer->OnBrowsingDataRemoverDone(); | 
| +  } | 
| +} | 
| + | 
| +}  // namespace browsing_data_important_sites_util | 
|  |