Compare commits

...
Author SHA1 Message Date
csagan5 a672f8d057 Release 72.0.3626.120 2019-02-27 14:11:24 +01:00
csagan5 503e4b8f27 Release 72.0.3626.119 2019-02-22 09:38:54 +01:00
csagan5 b615a77f51 Release 72.0.3626.114 2019-02-18 17:58:13 +01:00
csagan5 7f6cc79541 Release 72.0.3626.108 2019-02-13 17:41:35 +01:00
csagan5 2951298a6b Add URL to AV1 support wiki page 2019-02-12 07:42:39 +01:00
csagan5 d5b09217ef Release 72.0.3626.99 2019-02-08 17:54:20 +01:00
csagan5 28d274b712 Release 72.0.3626.87 2019-02-03 21:52:41 +01:00
csagan5 c800e61cc3 Release 72.0.3626.81 2019-01-29 18:14:13 +01:00
csagan5 d66be65985 Add section for 72.0.3626.73 2019-01-25 11:34:02 +01:00
csagan5 30b0e61732 Release 72.0.3626.73 2019-01-25 07:06:36 +01:00
csagan5 a7c33014b6 Add missing reference to AV1 patch 2019-01-24 20:15:35 +01:00
22 changed files with 77958 additions and 56977 deletions
+30
View File
@@ -1,3 +1,33 @@
# 72.0.3626.120
* add support for resource type in adblock engine (fixes https://github.com/bromite/bromite/issues/115)
* adblock engine speed optimizations
* use adblock engine also in SystemWebView
* add back uBlock Origin and EasyList filters
* added Fanboy's Annoyance List
# 72.0.3626.119
* use AdGuard filters
* fixes for new tile rows usage
* re-introduce patch to hide NTP tiles
* disable NTP tile metrics collection
# 72.0.3626.114
* use 4 tile rows instead of 2 in the new tab page
* do not grant geolocation permission to default search engine (fixes https://github.com/bromite/bromite/issues/250)
# 72.0.3626.108
# 72.0.3626.99
# 72.0.3626.87
* update bookmarks view after import
# 72.0.3626.81
* serve empty content for blocked scripts/images (fixes https://github.com/bromite/bromite/issues/238)
* keep support of Jelly Bean (workaround for upstream https://bugs.chromium.org/p/chromium/issues/detail?id=923477)
# 72.0.3626.73
# 72.0.3626.68
* do not ignore save prompt for users without SD card (workaround for upstream wontfix https://bugs.chromium.org/p/chromium/issues/detail?id=916606)
* remove third_party/analytics patch (now fixed upstream in https://chromium.googlesource.com/chromium/src.git/+/64d6a56f094efbab83802c07ad3ddffa014f9903)
+9 -3
View File
@@ -75,7 +75,7 @@ Yes, since version 69. While the desktop version of Chromium has an option to di
# Features
* baked-in adblock engine with filters from EasyList, EasyPrivacy and others
* baked-in adblock engine
* remove click-tracking and AMP from search results
* DNS-over-HTTPS support via Google, Cloudflare, Quad9 and AdGuard servers
* [proxy configuration page](https://github.com/bromite/bromite/wiki/ProxyConfiguration) with PAC and custom proxy lists support
@@ -88,10 +88,10 @@ Yes, since version 69. While the desktop version of Chromium has an option to di
* privacy enhancement patches from [Iridium](https://iridiumbrowser.de/), [Inox patchset](https://github.com/gcarq/inox-patchset), [Brave](https://brave.com/) and [ungoogled-chromium](https://github.com/Eloston/ungoogled-chromium) projects
## Features not related to privacy
* AV1 codec support
* import/export bookmarks
* allow playing videos in background tabs and disable pause on switching tabs
* all codecs included (proprietary, open H.264 etc.)
* [AV1 codec support](https://github.com/bromite/bromite/wiki/AV1-support)
* built with official speed optimizations
You can inspect all functionality/privacy changes by reading the patches: https://github.com/bromite/bromite/tree/master/build/patches
@@ -148,9 +148,15 @@ The patches are to be applied second the order specified in the `patches_list.tx
* [Inox patchset](https://github.com/gcarq/inox-patchset) for some patches (via ungoogled-chromium)
* [Brave Browser](https://github.com/brave/browser-android-tabs) for some patches
* nochromo for the original adblock patch
* [AdBlock Plus](https://adblockplus.org/), [uBlock Origin](https://github.com/uBlockOrigin), [Peter Lowe's adservers list](https://pgl.yoyo.org/adservers/), [EasyList and EasyPrivacy](https://easylist.to/) for the filters included
* [Vadim Pleshkov](http://vadimpleshkov.me/) for Bromite's logo
# Filters credits
* [EasyList](https://easylist.to/#easylist)
* [EasyPrivacy](https://easylist.to/#easyprivacy)
* [Fanboy's Annoyance List](https://easylist.to/#fanboy-s-annoyance-list)
* [uBlock Origin](https://github.com/uBlockOrigin)
* [Peter Lowe's adservers list](https://pgl.yoyo.org/adservers/)
# License
The patches published as part of the Bromite project are released under [GNU GPL v3](./LICENSE).
+1
View File
@@ -3,6 +3,7 @@ blink_symbol_level=1
dcheck_always_on=false
debuggable_apks=false
enable_ac3_eac3_audio_demuxing=true enable_hevc_demuxing=true enable_iterator_debugging=false
enable_av1_decoder=true
enable_hangout_services_extension=false
enable_mdns=false
enable_mse_mpeg2ts_stream_parser=true ffmpeg_branding="Chrome" proprietary_codecs=true
+76638 -56659
View File
File diff suppressed because one or more lines are too long
@@ -39,7 +39,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
#endif // OS_ANDROID
const FeatureEntry::Choice kNumRasterThreadsChoices[] = {
@@ -3556,6 +3564,12 @@ const FeatureEntry kFeatureEntries[] = {
@@ -3561,6 +3569,12 @@ const FeatureEntry kFeatureEntries[] = {
FEATURE_VALUE_TYPE(features::kAsyncDns)},
#endif // defined(OS_ANDROID)
@@ -55,7 +55,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2254,6 +2254,9 @@ const char kAutoFetchOnNetErrorPageDescription[] =
@@ -2260,6 +2260,9 @@ const char kAutoFetchOnNetErrorPageDescription[] =
"When enabled, and navigation fails with an offline error, schedule a "
"fetch of the page when online again.";
@@ -68,7 +68,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1352,6 +1352,9 @@ extern const char kAsyncDnsDescription[];
@@ -1355,6 +1355,9 @@ extern const char kAsyncDnsDescription[];
extern const char kAutoFetchOnNetErrorPageName[];
extern const char kAutoFetchOnNetErrorPageDescription[];
@@ -1,13 +1,16 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Wed, 1 Aug 2018 09:19:40 +0200
Subject: Add bookmark import/export actions in bookmarks activity and page
Subject: Add bookmark import/export actions
Thanks to Arnaud for the snippet on how to add toast notifications
Add bookmark import/export actions in bookmarks activity and page
Reduce permissions needed for bookmarks import/export
Completely remove contacts picker permission from the file dialog
---
chrome/android/java/AndroidManifest.xml | 1 -
.../java/res/menu/bookmark_action_bar_menu.xml | 14 ++
.../browser/bookmarks/BookmarkActionBar.java | 12 ++
.../chrome/browser/bookmarks/BookmarkActivity.java | 19 ++
.../chrome/browser/bookmarks/BookmarkBridge.java | 56 ++++++
.../chrome/browser/bookmarks/BookmarkActivity.java | 15 ++
.../chrome/browser/bookmarks/BookmarkBridge.java | 46 +++++
.../chrome/browser/bookmarks/BookmarkDelegate.java | 10 +
.../chrome/browser/bookmarks/BookmarkManager.java | 20 ++
.../chrome/browser/bookmarks/BookmarkPage.java | 1 +
@@ -15,13 +18,29 @@ Thanks to Arnaud for the snippet on how to add toast notifications
chrome/browser/BUILD.gn | 8 +-
.../browser/android/bookmarks/bookmark_bridge.cc | 215 +++++++++++++++++++++
chrome/browser/android/bookmarks/bookmark_bridge.h | 20 +-
chrome/browser/importer/profile_writer.cc | 2 +
chrome/browser/importer/profile_writer.cc | 12 ++
chrome/browser/importer/profile_writer.h | 6 +
chrome/common/BUILD.gn | 3 +
chrome/utility/BUILD.gn | 7 +-
chrome/utility/importer/bookmark_html_reader.cc | 27 ++-
chrome/utility/importer/bookmark_html_reader.h | 9 +
16 files changed, 419 insertions(+), 10 deletions(-)
.../src/org/chromium/ui/base/SelectFileDialog.java | 18 +-
ui/shell_dialogs/select_file_dialog.h | 2 +
ui/shell_dialogs/select_file_dialog_android.cc | 6 +
ui/shell_dialogs/select_file_dialog_android.h | 2 +
22 files changed, 445 insertions(+), 15 deletions(-)
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -35,7 +35,6 @@ by a child template that "extends" this file.
{% endif %}
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN"/>
- <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
<uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
<uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
diff --git a/chrome/android/java/res/menu/bookmark_action_bar_menu.xml b/chrome/android/java/res/menu/bookmark_action_bar_menu.xml
--- a/chrome/android/java/res/menu/bookmark_action_bar_menu.xml
+++ b/chrome/android/java/res/menu/bookmark_action_bar_menu.xml
@@ -30,7 +49,7 @@ diff --git a/chrome/android/java/res/menu/bookmark_action_bar_menu.xml b/chrome/
app:iconTint="@color/dark_mode_tint" />
<item
+ android:id="@+id/import_menu_id"
+ android:icon="@drawable/add_circle_blue"
+ android:icon="@drawable/ic_folder_blue_24dp"
+ android:title="@string/import_bookmarks"
+ android:visible="true"
+ app:showAsAction="ifRoom"
@@ -108,7 +127,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
static final int EDIT_BOOKMARK_REQUEST_CODE = 14;
public static final String INTENT_VISIT_BOOKMARK_ID = "BookmarkEditActivity.VisitBookmarkId";
@@ -32,6 +34,22 @@ public class BookmarkActivity extends SnackbarActivity {
@@ -32,6 +34,18 @@ public class BookmarkActivity extends SnackbarActivity {
if (TextUtils.isEmpty(url)) url = UrlConstants.BOOKMARKS_URL;
mBookmarkManager.updateForUrl(url);
setContentView(mBookmarkManager.getView());
@@ -117,10 +136,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
+ mWindowAndroid = new ActivityWindowAndroid(this, listenToActivityState);
+ mWindowAndroid.restoreInstanceState(savedInstanceState);
+ mBookmarkManager.setWindow(mWindowAndroid);
+ // Set up the animation placeholder to be the SurfaceView. This disables the
+ // SurfaceView's 'hole' clipping during animations that are notified to the window.
+// mWindowAndroid.setAnimationPlaceholderView(
+// mBookmarkManager.getContentViewRenderView().getSurfaceView());
+ }
+
+ @Override
@@ -131,7 +146,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
}
@Override
@@ -48,6 +66,7 @@ public class BookmarkActivity extends SnackbarActivity {
@@ -48,6 +62,7 @@ public class BookmarkActivity extends SnackbarActivity {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
@@ -154,7 +169,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
import android.text.TextUtils;
import android.util.Pair;
@@ -13,11 +17,16 @@ import org.chromium.base.ObserverList;
@@ -13,11 +17,15 @@ import org.chromium.base.ObserverList;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.metrics.RecordHistogram;
@@ -167,11 +182,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
import org.chromium.components.url_formatter.UrlFormatter;
+import org.chromium.ui.base.PageTransition;
+import org.chromium.ui.base.WindowAndroid;
+import org.chromium.ui.widget.Toast;
import java.util.ArrayList;
import java.util.List;
@@ -508,6 +517,24 @@ public class BookmarkBridge {
@@ -508,6 +516,24 @@ public class BookmarkBridge {
}
/**
@@ -196,19 +210,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
* Synchronously gets a list of bookmarks that match the specified search query.
* @param query Keyword used for searching bookmarks.
* @param maxNumberOfResult Maximum number of result to fetch.
@@ -840,6 +867,33 @@ public class BookmarkBridge {
@@ -840,6 +866,24 @@ public class BookmarkBridge {
depthList.add(depth);
}
+
+ @CalledByNative
+ public void bookmarksImported() {
+ Context context = ContextUtils.getApplicationContext();
+
+ //TODO: call this after actual import
+ //Toast.makeText(ContextUtils.getApplicationContext(), "Bookmarks imported", Toast.LENGTH_LONG).show();
+ }
+
+ @CalledByNative
+ public void bookmarksExported(String bookmarksPath) {
+ Context context = ContextUtils.getApplicationContext();
@@ -230,7 +235,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
private static List<Pair<Integer, Integer>> createPairsList(int[] left, int[] right) {
List<Pair<Integer, Integer>> pairList = new ArrayList<Pair<Integer, Integer>>();
for (int i = 0; i < left.length; i++) {
@@ -906,6 +960,8 @@ public class BookmarkBridge {
@@ -906,6 +950,8 @@ public class BookmarkBridge {
boolean getFolders, boolean getBookmarks, List<BookmarkId> bookmarksList);
private native BookmarkId nativeGetChildAt(long nativeBookmarkBridge, long id, int type,
int index);
@@ -358,7 +363,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
"bookmarks/bookmark_model_factory.cc",
"bookmarks/bookmark_model_factory.h",
"bookmarks/bookmark_stats.cc",
@@ -2614,8 +2618,6 @@ jumbo_split_static_library("browser") {
@@ -2616,8 +2620,6 @@ jumbo_split_static_library("browser") {
"banners/app_banner_infobar_delegate_desktop.h",
"banners/app_banner_manager_desktop.cc",
"banners/app_banner_manager_desktop.h",
@@ -367,7 +372,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
"certificate_viewer.h",
"chrome_browser_field_trials_desktop.cc",
"chrome_browser_field_trials_desktop.h",
@@ -2704,8 +2706,6 @@ jumbo_split_static_library("browser") {
@@ -2706,8 +2708,6 @@ jumbo_split_static_library("browser") {
"importer/importer_uma.h",
"importer/in_process_importer_bridge.cc",
"importer/in_process_importer_bridge.h",
@@ -509,27 +514,25 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
+ select_file_dialog_ = ui::SelectFileDialog::Create(
+ this, std::make_unique<ChromeSelectFilePolicy>(nullptr));
+
+ //NOTE: extension and description are not used on Android
+ //NOTE: extension and description are not used on Android, thus not set
+ ui::SelectFileDialog::FileTypeInfo file_type_info;
+ file_type_info.extensions.resize(1);
+ file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("html"));
+ file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("htm"));
+ file_type_info.extension_description_overrides.push_back(base::ASCIIToUTF16("Netscape Bookmark"));
+ file_type_info.allowed_paths =
+ ui::SelectFileDialog::FileTypeInfo::NATIVE_OR_DRIVE_PATH;
+
+ static const std::vector<base::string16> v_accept_types = { base::UTF8ToUTF16("text/html") };
+
+ // Android needs the original MIME types and an additional capture value.
+ std::pair<std::vector<base::string16>, bool> accept_types =
+ std::make_pair(v_accept_types, /* use_media_capture */ false);
+
+ select_file_dialog_->SelectFile(
+ ui::SelectFileDialog::SELECT_OPEN_FILE,
+ base::string16(),
+ import_path_,
+ export_path_,
+ &file_type_info,
+ 0,
+ base::FilePath::StringType(),
+ window,
+ NULL);
+
+ //NOTE: this should be called after the actual import
+ Java_BookmarkBridge_bookmarksImported(env, obj);
+ &accept_types
+ );
+}
+
+void BookmarkBridge::ExportBookmarks(JNIEnv* env,
@@ -537,20 +540,20 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
+ DCHECK(IsLoaded());
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ if (import_path_.empty()) {
+ if (!base::android::GetDownloadsDirectory(&import_path_)) {
+ if (export_path_.empty()) {
+ if (!base::android::GetDownloadsDirectory(&export_path_)) {
+ LOG(ERROR) << "Could not retrieve downloads directory for bookmarks export";
+ return;
+ }
+ import_path_ = import_path_.Append(FILE_PATH_LITERAL("bookmarks.html"));
+ export_path_ = export_path_.Append(FILE_PATH_LITERAL("bookmarks.html"));
+ }
+
+ bookmark_html_writer::WriteBookmarks(profile_, import_path_, NULL);
+ bookmark_html_writer::WriteBookmarks(profile_, export_path_, NULL);
+
+ Java_BookmarkBridge_bookmarksExported(env, obj, ConvertUTF8ToJavaString(env, export_path_.MaybeAsASCII()));
+
+ //NOTE: nothing will be written if write permission has not been granted before
+ LOG(INFO) << "Bookmarks exported successfully in " << import_path_;
+
+ Java_BookmarkBridge_bookmarksExported(env, obj, ConvertUTF8ToJavaString(env, import_path_.MaybeAsASCII()));
+ LOG(INFO) << "Bookmarks exported successfully to " << export_path_;
+}
+
+// Attempts to create a TemplateURL from the provided data. |title| is optional.
@@ -578,29 +581,29 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
+ file.Initialize(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
+ }
+ if (!file.IsValid()) {
+ LOG(ERROR) << "Cannot open bookmarks file for import";
+ select_file_dialog_->ShowToast("Cannot open bookmarks file for import");
+ return;
+ }
+
+ auto fileLength = file.GetLength();
+ if (-1 == fileLength) {
+ LOG(ERROR) << "Cannot read bookmarks file length";
+ select_file_dialog_->ShowToast("Cannot read bookmarks file length");
+ return;
+ }
+
+ if (fileLength > 10 * 1024 * 1024) {
+ LOG(ERROR) << "Bookmarks file is too big";
+ select_file_dialog_->ShowToast("Bookmark file is bigger than 10MB");
+ return;
+ }
+
+ std::vector<char> buffer(fileLength);
+ if (-1 == file.ReadAtCurrentPos(buffer.data(), fileLength)) {
+ LOG(ERROR) << "Could not read bookmarks file";
+ select_file_dialog_->ShowToast("Could not read bookmarks file");
+ return;
+ }
+
+ if (buffer.empty()) {
+ LOG(ERROR) << "Empty bookmarks file";
+ select_file_dialog_->ShowToast("Empty bookmarks file");
+ return;
+ }
+
@@ -618,11 +621,11 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
+ &search_engines,
+ nullptr);
+
+ // writing to profile will begin extensive changes and use the same bookmarks model for persisting changes
+ auto *writer = new ProfileWriter(profile_);
+
+ if (!bookmarks.empty()) {
+ writer->AddBookmarks(bookmarks, base::ASCIIToUTF16("Imported"));
+ // adding bookmarks will begin extensive changes to the model
+ writer->AddBookmarksWithModel(bookmark_model_, bookmarks, base::ASCIIToUTF16("Imported"));
+ }
+ if (!search_engines.empty()) {
+ TemplateURLService::OwnedTemplateURLVector owned_template_urls;
@@ -635,8 +638,10 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse
+ writer->AddKeywords(std::move(owned_template_urls), false);
+ }
+
+ select_file_dialog_->ShowToast("Bookmarks import complete");
+
+ LOG(INFO) << "Imported " << bookmarks.size() << " bookmarks and " <<
+ search_engines.size() << " search engines from " << import_path_;
+ search_engines.size() << " search engines from " << path.MaybeAsASCII();
+}
+
+void BookmarkBridge::FileSelectionCanceled(void* params) {
@@ -698,7 +703,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser
void ShimBeingDeleted(PartnerBookmarksShim* shim) override;
Profile* profile_;
+ base::FilePath import_path_;
+ base::FilePath export_path_;
JavaObjectWeakGlobalRef weak_java_ref_;
bookmarks::BookmarkModel* bookmark_model_; // weak
bookmarks::ManagedBookmarkService* managed_bookmark_service_; // weak
@@ -727,6 +732,46 @@ diff --git a/chrome/browser/importer/profile_writer.cc b/chrome/browser/importer
}
void ProfileWriter::AddHomepage(const GURL& home_page) {
@@ -123,6 +125,16 @@ void ProfileWriter::AddBookmarks(
return;
BookmarkModel* model = BookmarkModelFactory::GetForBrowserContext(profile_);
+ AddBookmarksWithModel(model, bookmarks, top_level_folder_name);
+}
+
+void ProfileWriter::AddBookmarksWithModel(
+ BookmarkModel* model,
+ const std::vector<ImportedBookmarkEntry>& bookmarks,
+ const base::string16& top_level_folder_name) {
+ if (bookmarks.empty())
+ return;
+
DCHECK(model->loaded());
// If the bookmark bar is currently empty, we should import directly to it.
diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/profile_writer.h
--- a/chrome/browser/importer/profile_writer.h
+++ b/chrome/browser/importer/profile_writer.h
@@ -12,6 +12,7 @@
#include "base/strings/string16.h"
#include "base/time/time.h"
#include "build/build_config.h"
+#include "components/bookmarks/browser/bookmark_model.h"
#include "components/favicon_base/favicon_usage_data.h"
#include "components/history/core/browser/history_types.h"
#include "components/search_engines/template_url_service.h"
@@ -67,6 +68,11 @@ class ProfileWriter : public base::RefCountedThreadSafe<ProfileWriter> {
const std::vector<ImportedBookmarkEntry>& bookmarks,
const base::string16& top_level_folder_name);
+ virtual void AddBookmarksWithModel(
+ bookmarks::BookmarkModel* model,
+ const std::vector<ImportedBookmarkEntry>& bookmarks,
+ const base::string16& top_level_folder_name);
+
virtual void AddFavicons(const favicon_base::FaviconUsageDataList& favicons);
// Adds the TemplateURLs in |template_urls| to the local store.
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
--- a/chrome/common/BUILD.gn
+++ b/chrome/common/BUILD.gn
@@ -870,6 +915,116 @@ diff --git a/chrome/utility/importer/bookmark_html_reader.h b/chrome/utility/imp
// Returns true if |url| should be imported as a search engine, i.e. because it
// has replacement terms. Chrome treats such bookmarks as search engines rather
// than true bookmarks.
diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
--- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
+++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
@@ -32,6 +32,7 @@ import org.chromium.base.task.AsyncTask;
import org.chromium.ui.ContactsPickerListener;
import org.chromium.ui.PhotoPickerListener;
import org.chromium.ui.R;
+import org.chromium.ui.widget.Toast;
import org.chromium.ui.UiUtils;
import java.io.File;
@@ -52,6 +53,7 @@ public class SelectFileDialog
private static final String IMAGE_TYPE = "image/";
private static final String VIDEO_TYPE = "video/";
private static final String AUDIO_TYPE = "audio/";
+ private static final String HTML_TYPE = "text/html";
private static final String ALL_IMAGE_TYPES = IMAGE_TYPE + "*";
private static final String ALL_VIDEO_TYPES = VIDEO_TYPE + "*";
private static final String ALL_AUDIO_TYPES = AUDIO_TYPE + "*";
@@ -130,6 +132,11 @@ public class SelectFileDialog
mFileTypes = fileTypes;
}
+ @CalledByNative
+ private void showToast(String message) {
+ Toast.makeText(ContextUtils.getApplicationContext(), message, Toast.LENGTH_LONG).show();
+ }
+
/**
* Creates and starts an intent based on the passed fileTypes and capture value.
* @param fileTypes MIME types requested (i.e. "image/*")
@@ -159,7 +166,7 @@ public class SelectFileDialog
if (!window.hasPermission(Manifest.permission.READ_CONTACTS)) {
missingPermissions.add(Manifest.permission.READ_CONTACTS);
}
- } else if (shouldUsePhotoPicker()) {
+ } else if (shouldUsePhotoPicker() || shouldShowHtmlTypes()) {
if (!window.hasPermission(Manifest.permission.READ_EXTERNAL_STORAGE)) {
missingPermissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
@@ -324,9 +331,7 @@ public class SelectFileDialog
* 3.) There is a valid Android Activity associated with the file request.
*/
private boolean shouldUseContactsPicker() {
- if (mFileTypes.size() != 1) return false;
- if (!mFileTypes.get(0).equals("text/json+contacts")) return false;
- return UiUtils.shouldShowContactsPicker() && mWindowAndroid.getActivity().get() != null;
+ return false;
}
/**
@@ -347,6 +352,7 @@ public class SelectFileDialog
}
if (!mimeTypes.contains(mimeType)) mimeTypes.add(mimeType);
}
+ if (mimeTypes.size() == 0) return null;
return mimeTypes;
}
@@ -649,6 +655,10 @@ public class SelectFileDialog
return countAcceptTypesFor(specificType) > 0;
}
+ private boolean shouldShowHtmlTypes() {
+ return countAcceptTypesFor(HTML_TYPE) > 0;
+ }
+
private boolean shouldShowImageTypes() {
return shouldShowTypes(ALL_IMAGE_TYPES, IMAGE_TYPE);
}
diff --git a/ui/shell_dialogs/select_file_dialog.h b/ui/shell_dialogs/select_file_dialog.h
--- a/ui/shell_dialogs/select_file_dialog.h
+++ b/ui/shell_dialogs/select_file_dialog.h
@@ -187,6 +187,8 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog
void* params);
bool HasMultipleFileTypeChoices();
+ virtual void ShowToast(const std::string& message) = 0;
+
protected:
friend class base::RefCountedThreadSafe<SelectFileDialog>;
diff --git a/ui/shell_dialogs/select_file_dialog_android.cc b/ui/shell_dialogs/select_file_dialog_android.cc
--- a/ui/shell_dialogs/select_file_dialog_android.cc
+++ b/ui/shell_dialogs/select_file_dialog_android.cc
@@ -139,6 +139,12 @@ void SelectFileDialogImpl::SelectFileImpl(
owning_window->GetJavaObject());
}
+void SelectFileDialogImpl::ShowToast(const std::string& message) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+
+ Java_SelectFileDialog_showToast(env, java_object_, base::android::ConvertUTF8ToJavaString(env, message));
+}
+
SelectFileDialogImpl::~SelectFileDialogImpl() {
}
diff --git a/ui/shell_dialogs/select_file_dialog_android.h b/ui/shell_dialogs/select_file_dialog_android.h
--- a/ui/shell_dialogs/select_file_dialog_android.h
+++ b/ui/shell_dialogs/select_file_dialog_android.h
@@ -55,6 +55,8 @@ class SelectFileDialogImpl : public SelectFileDialog {
gfx::NativeWindow owning_window,
void* params) override;
+ void ShowToast(const std::string& message) override;
+
protected:
~SelectFileDialogImpl() override;
--
2.11.0
@@ -41,7 +41,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
@@ -39,6 +39,7 @@ import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
@@ -41,6 +41,7 @@ import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
import org.chromium.chrome.browser.notifications.NotificationPlatformBridge;
import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
import org.chromium.chrome.browser.profiles.Profile;
@@ -49,7 +49,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
import org.chromium.chrome.browser.searchwidget.SearchActivity;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.DocumentModeAssassin;
@@ -273,6 +274,7 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
@@ -275,6 +276,7 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
*/
public static boolean isCustomTabIntent(Intent intent) {
if (intent == null) return false;
@@ -13,7 +13,7 @@ Disable it by default on Android as it is everywhere else
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -3330,6 +3330,11 @@ const FeatureEntry kFeatureEntries[] = {
@@ -3335,6 +3335,11 @@ const FeatureEntry kFeatureEntries[] = {
FEATURE_VALUE_TYPE(features::kUseGoogleLocalNtp)},
#endif // !defined(OS_ANDROID)
@@ -14,7 +14,7 @@ Subject: Add flag to disable IPv6 probes
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -3382,6 +3382,11 @@ const FeatureEntry kFeatureEntries[] = {
@@ -3387,6 +3387,11 @@ const FeatureEntry kFeatureEntries[] = {
FEATURE_VALUE_TYPE(features::kEnableVirtualKeyboardUkm)},
#endif // OS_CHROMEOS
@@ -0,0 +1,116 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Mon, 9 Jul 2018 20:12:19 +0200
Subject: Add flag to show/hide NTP tiles
---
chrome/browser/about_flags.cc | 4 ++++
chrome/browser/android/ntp/most_visited_sites_bridge.cc | 8 ++++++++
chrome/browser/flag_descriptions.cc | 4 ++++
chrome/browser/flag_descriptions.h | 3 +++
chrome/common/chrome_switches.cc | 3 +++
chrome/common/chrome_switches.h | 1 +
6 files changed, 23 insertions(+)
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1996,6 +1996,10 @@ const FeatureEntry kFeatureEntries[] = {
SINGLE_VALUE_TYPE(switches::kHostedAppQuitNotification)},
#endif // OS_MACOSX
#if defined(OS_ANDROID)
+ {"hide-ntp-tiles",
+ flag_descriptions::kHideNTPTilesName,
+ flag_descriptions::kHideNTPTilesDescription, kOsAndroid,
+ SINGLE_VALUE_TYPE(switches::kHideNTPTiles)},
{"disable-pull-to-refresh-effect",
flag_descriptions::kPullToRefreshEffectName,
flag_descriptions::kPullToRefreshEffectDescription, kOsAndroid,
diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/browser/android/ntp/most_visited_sites_bridge.cc
--- a/chrome/browser/android/ntp/most_visited_sites_bridge.cc
+++ b/chrome/browser/android/ntp/most_visited_sites_bridge.cc
@@ -13,9 +13,11 @@
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
+#include "base/command_line.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/common/chrome_switches.h"
#include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/ntp_tiles/chrome_most_visited_sites_factory.h"
#include "chrome/browser/profiles/profile.h"
@@ -162,6 +164,10 @@ void MostVisitedSitesBridge::JavaObserver::OnURLsAvailable(
std::vector<int> sources;
std::vector<int> section_types;
std::vector<int64_t> data_generation_times;
+
+ // do not source any tile if NTP is disabled
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kHideNTPTiles)) {
for (const auto& section : sections) {
const NTPTilesVector& tiles = section.second;
section_types.resize(section_types.size() + tiles.size(),
@@ -176,6 +182,8 @@ void MostVisitedSitesBridge::JavaObserver::OnURLsAvailable(
tile.data_generation_time.ToJavaTime());
}
}
+ }
+
Java_MostVisitedSitesBridge_onURLsAvailable(
env, observer_, ToJavaArrayOfStrings(env, titles),
ToJavaArrayOfStrings(env, urls), ToJavaIntArray(env, section_types),
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -167,6 +167,10 @@ const char kAwaitOptimizationName[] = "Await optimization";
const char kAwaitOptimizationDescription[] =
"Enables await taking 1 tick on the microtask queue.";
+const char kHideNTPTilesName[] = "Hide NTP tiles";
+const char kHideNTPTilesDescription[] =
+ "Hide all tiles on the New Tab Page, making it effectively empty all the time.";
+
const char kBleAdvertisingInExtensionsName[] = "BLE Advertising in Chrome Apps";
const char kBleAdvertisingInExtensionsDescription[] =
"Enables BLE Advertising in Chrome Apps. BLE Advertising might interfere "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -126,6 +126,9 @@ extern const char kAutoplayPolicyDocumentUserActivation[];
extern const char kAwaitOptimizationName[];
extern const char kAwaitOptimizationDescription[];
+extern const char kHideNTPTilesName[];
+extern const char kHideNTPTilesDescription[];
+
extern const char kBleAdvertisingInExtensionsName[];
extern const char kBleAdvertisingInExtensionsDescription[];
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -88,6 +88,9 @@ const char kAutoSelectDesktopCaptureSource[] =
const char kBypassAppBannerEngagementChecks[] =
"bypass-app-banner-engagement-checks";
+// Hide all New Tab Page tiles, making it effectively empty all the time.
+const char kHideNTPTiles[] = "hide-ntp-tiles";
+
// How often (in seconds) to check for updates. Should only be used for testing
// purposes.
const char kCheckForUpdateIntervalSec[] = "check-for-update-interval";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -46,6 +46,7 @@ extern const char kAuthServerWhitelist[];
extern const char kAutoOpenDevToolsForTabs[];
extern const char kAutoSelectDesktopCaptureSource[];
extern const char kBypassAppBannerEngagementChecks[];
+extern const char kHideNTPTiles[];
extern const char kCheckForUpdateIntervalSec[];
extern const char kCipherSuiteBlacklist[];
extern const char kCloudPrintFile[];
--
2.11.0
@@ -150,7 +150,7 @@ diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -4990,19 +4990,7 @@ ChromeContentBrowserClient::GetSafeBrowsingUrlCheckerDelegate(
@@ -5010,19 +5010,7 @@ ChromeContentBrowserClient::GetSafeBrowsingUrlCheckerDelegate(
content::ResourceContext* resource_context) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
+281 -120
View File
@@ -10,23 +10,127 @@ Add menu option to toggle global Adblock preference
Allow toggling Chromium's "ads enabled" content settings option together with Bromite adblock engine.
Perform adblock interception in StartJob to address lagging issues
New mechanism for adblocking based on Brave's adblocking hook
Add support for Webview content blocking
---
android_webview/browser/net/aw_network_delegate.cc | 68 ++++
android_webview/browser/net/aw_network_delegate.h | 3 +
chrome/android/java/res/menu/custom_tabs_menu.xml | 12 +
chrome/android/java/res/menu/main_menu.xml | 11 +
.../chromium/chrome/browser/ChromeActivity.java | 8 +
.../chrome/browser/ChromeTabbedActivity.java | 8 +
.../browser/appmenu/AppMenuPropertiesDelegate.java | 38 +++
.../browser/appmenu/AppMenuPropertiesDelegate.java | 38 ++
.../CustomTabAppMenuPropertiesDelegate.java | 2 +
.../java/strings/android_chrome_strings.grd | 11 +
chrome/browser/net/chrome_network_delegate.cc | 62 ++++
chrome/browser/net/chrome_network_delegate.cc | 83 +++++
.../subresource_filter_content_settings_manager.cc | 1 +
net/BUILD.gn | 7 +
net/url_request/adblock_intercept.cc | 341 +++++++++++++++++++++
net/url_request/adblock_intercept.h | 41 +++
12 files changed, 542 insertions(+)
net/url_request/adblock_intercept.cc | 389 +++++++++++++++++++++
net/url_request/adblock_intercept.h | 35 ++
14 files changed, 676 insertions(+)
create mode 100644 net/url_request/adblock_intercept.cc
create mode 100644 net/url_request/adblock_intercept.h
diff --git a/android_webview/browser/net/aw_network_delegate.cc b/android_webview/browser/net/aw_network_delegate.cc
--- a/android_webview/browser/net/aw_network_delegate.cc
+++ b/android_webview/browser/net/aw_network_delegate.cc
@@ -19,9 +19,11 @@
#include "net/base/proxy_server.h"
#include "net/http/http_response_headers.h"
#include "net/proxy_resolution/proxy_info.h"
+#include "net/url_request/adblock_intercept.h"
#include "net/url_request/url_request.h"
using content::BrowserThread;
+using content::ResourceRequestInfo;
namespace android_webview {
@@ -48,6 +50,72 @@ AwNetworkDelegate::AwNetworkDelegate() {}
AwNetworkDelegate::~AwNetworkDelegate() {
}
+#define TRANSPARENT1PXGIF "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
+#define EMPTYJS "data:text/javascript;base64,Cg=="
+#define EMPTYCSS "data:text/css;base64,Cg=="
+
+static bool requestIntercepted(net::URLRequest* request, GURL* new_url) {
+ bool block = false, isValidUrl;
+
+ isValidUrl = request->url().is_valid();
+ std::string scheme = request->url().scheme();
+ if (isValidUrl && scheme.length()) {
+ std::transform(scheme.begin(), scheme.end(), scheme.begin(), ::tolower);
+ if ("http" != scheme && "https" != scheme) {
+ isValidUrl = false;
+ }
+ }
+ const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
+
+ // there are no per-site nor global ad/content settings when using the SystemWebView
+ bool adblock_enabled = true;
+ if (isValidUrl && info) {
+ auto resource_type = info->GetResourceType();
+
+ if (adblock_enabled
+ && content::RESOURCE_TYPE_MAIN_FRAME != resource_type
+ && net::adblock_intercept(request->url(),
+ request->initiator()->host(),
+ resource_type)) {
+ block = true;
+ }
+
+ if (block) {
+ switch (resource_type) {
+ case content::RESOURCE_TYPE_IMAGE:
+ case content::RESOURCE_TYPE_FAVICON:
+ *new_url = GURL(TRANSPARENT1PXGIF);
+ break;
+ case content::RESOURCE_TYPE_SCRIPT:
+ *new_url = GURL(EMPTYJS);
+ break;
+ case content::RESOURCE_TYPE_STYLESHEET:
+ *new_url = GURL(EMPTYCSS);
+ break;
+ default:
+ *new_url = GURL("");
+ return true;
+ }
+ }
+ } // valid URL and info
+ return false;
+}
+#undef TRANSPARENT1PXGIF
+#undef EMPTYJS
+#undef EMPTYCSS
+
+int AwNetworkDelegate::OnBeforeURLRequest(net::URLRequest* request,
+ net::CompletionOnceCallback callback,
+ GURL* new_url) {
+ if (request) {
+ // most requests will be modified rather than intercepted
+ if (requestIntercepted(request, new_url))
+ return net::ERR_BLOCKED_BY_ADMINISTRATOR;
+ } // request
+
+ return net::OK;
+}
+
int AwNetworkDelegate::OnBeforeStartTransaction(
net::URLRequest* request,
net::CompletionOnceCallback callback,
diff --git a/android_webview/browser/net/aw_network_delegate.h b/android_webview/browser/net/aw_network_delegate.h
--- a/android_webview/browser/net/aw_network_delegate.h
+++ b/android_webview/browser/net/aw_network_delegate.h
@@ -22,6 +22,9 @@ class AwNetworkDelegate : public net::NetworkDelegateImpl {
private:
// NetworkDelegate implementation.
+ int OnBeforeURLRequest(net::URLRequest* request,
+ net::CompletionOnceCallback callback,
+ GURL* new_url) override;
int OnBeforeStartTransaction(net::URLRequest* request,
net::CompletionOnceCallback callback,
net::HttpRequestHeaders* headers) override;
diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/java/res/menu/custom_tabs_menu.xml
--- a/chrome/android/java/res/menu/custom_tabs_menu.xml
+++ b/chrome/android/java/res/menu/custom_tabs_menu.xml
@@ -213,19 +317,15 @@ diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/
#endif
#if defined(OS_CHROMEOS)
@@ -193,16 +195,76 @@ void ChromeNetworkDelegate::set_cookie_settings(
@@ -193,10 +195,91 @@ void ChromeNetworkDelegate::set_cookie_settings(
cookie_settings_ = cookie_settings;
}
+#define TRANSPARENT1PXGIF "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
+#define EMPTYJS "data:text/javascript;base64,Cg=="
+#define EMPTYCSS "data:text/css;base64,Cg=="
+
int ChromeNetworkDelegate::OnBeforeURLRequest(
net::URLRequest* request,
net::CompletionOnceCallback callback,
GURL* new_url) {
+
+#if defined(OS_ANDROID)
+ if (request) {
+static bool requestIntercepted(net::URLRequest* request, GURL* new_url) {
+ bool block = false, isValidUrl;
+
+ isValidUrl = request->url().is_valid();
@@ -259,37 +359,56 @@ diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/
+ }
+ }
+
+ auto resource_type = info->GetResourceType();
+
+ if (adblock_enabled
+ && content::RESOURCE_TYPE_MAIN_FRAME != info->GetResourceType()
+ && content::RESOURCE_TYPE_MAIN_FRAME != resource_type
+ && net::adblock_intercept(request->url(),
+ request->initiator()->host(),
+ info->GetResourceType())) {
+ resource_type)) {
+ block = true;
+ }
+
+ if (block) {
+ if (content::RESOURCE_TYPE_IMAGE == info->GetResourceType()) {
+ *new_url = GURL(TRANSPARENT1PXGIF);
+ } else {
+ *new_url = GURL("");
+ switch (resource_type) {
+ case content::RESOURCE_TYPE_IMAGE:
+ case content::RESOURCE_TYPE_FAVICON:
+ *new_url = GURL(TRANSPARENT1PXGIF);
+ break;
+ case content::RESOURCE_TYPE_SCRIPT:
+ *new_url = GURL(EMPTYJS);
+ break;
+ case content::RESOURCE_TYPE_STYLESHEET:
+ *new_url = GURL(EMPTYCSS);
+ break;
+ default:
+ *new_url = GURL("");
+ return true;
+ }
+ return net::ERR_BLOCKED_BY_ADMINISTRATOR;
+ }
+ } // valid URL and info
+ return false;
+}
+#undef TRANSPARENT1PXGIF
+#undef EMPTYJS
+#undef EMPTYCSS
+
int ChromeNetworkDelegate::OnBeforeURLRequest(
net::URLRequest* request,
net::CompletionOnceCallback callback,
GURL* new_url) {
+
+#if defined(OS_ANDROID)
+ if (request) {
+ // most requests will be modified rather than intercepted
+ if (requestIntercepted(request, new_url))
+ return net::ERR_BLOCKED_BY_ADMINISTRATOR;
+ } // request
+#endif // OS_ANDROID
+
extensions_delegate_->ForwardStartRequestStatus(request);
return extensions_delegate_->NotifyBeforeURLRequest(
request, std::move(callback), new_url);
}
+#undef TRANSPARENT1PXGIF
+
int ChromeNetworkDelegate::OnBeforeStartTransaction(
net::URLRequest* request,
net::CompletionOnceCallback callback,
diff --git a/chrome/browser/subresource_filter/subresource_filter_content_settings_manager.cc b/chrome/browser/subresource_filter/subresource_filter_content_settings_manager.cc
--- a/chrome/browser/subresource_filter/subresource_filter_content_settings_manager.cc
+++ b/chrome/browser/subresource_filter/subresource_filter_content_settings_manager.cc
@@ -322,7 +441,7 @@ diff --git a/net/url_request/adblock_intercept.cc b/net/url_request/adblock_inte
new file mode 100644
--- /dev/null
+++ b/net/url_request/adblock_intercept.cc
@@ -0,0 +1,341 @@
@@ -0,0 +1,389 @@
+/*
+ This file is part of Bromite.
+
@@ -339,7 +458,7 @@ new file mode 100644
+ You should have received a copy of the GNU General Public License
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+#include "url/gurl.h"
+#include "adblock_intercept.h"
+
+#ifdef ADB_TESTER
+#include <cstddef>
@@ -351,7 +470,6 @@ new file mode 100644
+
+#else
+
+#include "content/public/common/resource_type.h"
+#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
+#include <android/log.h>
+
@@ -371,7 +489,8 @@ new file mode 100644
+// with a valid TLD. If |subdomain_permission| is ALLOW_SUBDOMAIN, we check
+// against host "*.<domain_in_lower_case>.<TLD>" instead. Will return the TLD
+// string in |tld|, if specified and the |host| can be parsed.
+static bool is_first_party(char *l_host, char *l_url_host) {
+static bool is_first_party(const char *l_host, int len, const char *l_url_host,
+ int b_len) {
+ size_t tld_length;
+
+#ifdef ADB_TESTER
@@ -390,15 +509,14 @@ new file mode 100644
+ return false;
+#endif
+
+ int len = strlen(l_host);
+ char *tld = l_host + len - tld_length;
+ const char *tld = l_host + len - tld_length;
+
+ // Removes any subdomain from origin host.
+ int i = len - tld_length - 2, top_i = i;
+ if (i < 0) {
+ return false;
+ }
+ char *domain = l_host;
+ const char *domain = l_host;
+ for (; i >= 0; i--) {
+ if (l_host[i] == '.') {
+ int p_len = top_i - i;
@@ -422,7 +540,6 @@ new file mode 100644
+#endif
+
+ // Check if supplied URL host matches, including the dot.
+ int b_len = strlen(l_url_host);
+ if (b_len < len) {
+ return false;
+ }
@@ -435,26 +552,38 @@ new file mode 100644
+ return true;
+}
+
+static char *strtolower(const char *str) {
+ int len = strlen(str);
+ char *ret = (char *)malloc(len + 1);
+ ret[len] = '\0';
+static char *strtolower(const char *str, int len, bool &should_free) {
+ char *ret = NULL;
+ for (int i = 0; i < len; i++) {
+ if ((65 <= str[i]) && (str[i] <= 90)) {
+ // first time a difference is found, allocate buffer and copy previous
+ // characters (if any)
+ if (ret == NULL) {
+ ret = (char *)malloc(len + 1);
+ if (i != 0)
+ memcpy(ret, str, i);
+ }
+ // convert character to lower case
+ ret[i] = str[i] + 32;
+ } else {
+ ret[i] = str[i];
+ if (ret != NULL)
+ ret[i] = str[i];
+ }
+ }
+ return ret;
+
+ if (ret != NULL) {
+ ret[len] = '\0';
+ should_free = true;
+ return ret;
+ }
+
+ // return source, unchanged
+ return (char *)str;
+}
+
+static char *strtosep(const char *str) {
+ int len = strlen(str);
+static char *strtosep(const char *str, int len) {
+ char *ret = (char *)malloc(len + 3);
+ ret[0] = '^';
+ ret[len + 1] = '^';
+ ret[len + 2] = '\0';
+ for (int i = 0; i < len; i++) {
+ if ((str[i] == ':') || (str[i] == '/') || (str[i] == '?') ||
+ (str[i] == '&') || (str[i] == '=')) {
@@ -463,6 +592,9 @@ new file mode 100644
+ ret[i + 1] = str[i];
+ }
+ }
+ // the index 'len' character is set by the previous loop
+ ret[len + 1] = '^';
+ ret[len + 2] = '\0';
+ return ret;
+}
+
@@ -549,9 +681,9 @@ new file mode 100644
+ return match_domain;
+}
+
+static bool url_match_party(adblock_entry *entry, const GURL &url,
+ const std::string &origin_host, bool &checked_fp,
+ bool &fp) {
+static bool url_match_party(adblock_entry *entry, const char *l_origin_host,
+ int origin_host_len, const char *l_url_host,
+ int url_host_len, bool &checked_fp, bool &fp) {
+ bool wanted_fp;
+ if ((entry->flags & ADBLOCK_FLAG_THIRD_PARTY) != 0) {
+ wanted_fp = false;
@@ -562,104 +694,139 @@ new file mode 100644
+ return true;
+ }
+
+ if (origin_host.empty()) {
+ if (origin_host_len == 0) {
+ // cannot match this rule, no origin host to determine first/third party
+ return false;
+ }
+
+#ifdef ADB_TESTER
+//__android_log_print(ANDROID_LOG_INFO, LOG_TAG, "matchFirst=%d matchThird=%d",
+// matchFirstParty, matchThirdParty);
+#endif
+ if (!checked_fp) {
+ // lower-case version
+ char *l_host = strtolower(origin_host.c_str()),
+ *l_url_host = strtolower(url.host().c_str());
+
+ // is the URL a first-party to the current page's host?
+ fp = is_first_party(l_host, l_url_host);
+ fp = is_first_party(l_origin_host, origin_host_len, l_url_host,
+ url_host_len);
+
+ checked_fp = true;
+#ifdef ADB_TESTER
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG,
+ "is_first_party(\"%s\", \"%s\") = %s", l_host,
+ "is_first_party(\"%s\", \"%s\") = %s", l_origin_host,
+ l_url_host, fp ? "true" : "false");
+#endif
+ free(l_host);
+ free(l_url_host);
+ }
+
+ return fp == wanted_fp;
+}
+
+int adblock_intercept(const GURL &url, const std::string &origin_host
+#ifndef ADB_TESTER
+, content::ResourceType resource_type
+static bool resource_type_match(adblock_entry *entry,
+ content::ResourceType resource_type) {
+ bool exclude;
+ if ((entry->flags & ADBLOCK_FLAG_RESOURCE_TYPE_IN) != 0) {
+ exclude = false;
+ } else if ((entry->flags & ADBLOCK_FLAG_RESOURCE_TYPE_NOT_IN) != 0) {
+ exclude = true;
+ } else {
+ // no resource type matching
+ return true;
+ }
+
+ // use a bitwise trick to test for the current resource type
+ bool found = (entry->flags & (resource_type << 16));
+ if (!exclude)
+ return found;
+ return !found;
+}
+
+int adblock_intercept(const GURL &url, const std::string &origin_host,
+ content::ResourceType resource_type) {
+ // these are verified on caller when not testing
+#ifdef ADB_TESTER
+ if (!url.is_valid() || !url.SchemeIsHTTPOrHTTPS()) {
+ return 0;
+ }
+#endif
+) {
+ if (url.is_valid() && url.SchemeIsHTTPOrHTTPS()) {
+ const char *c_url = url.spec().c_str();
+ char *c_url_lower = strtolower(c_url);
+ char *c_url_sep = strtosep(c_url);
+ char *c_url_lower_sep = strtosep(c_url_lower);
+
+ bool free1 = false, free2 = false, free3 = false, free4 = false;
+ int url_len = url.spec().size();
+ const char *c_url = url.spec().c_str();
+ char *c_url_lower = strtolower(c_url, url_len, free1);
+ char *c_url_sep = strtosep(c_url, url_len);
+ char *c_url_lower_sep = strtolower(c_url_sep, url_len + 2, free4);
+
+ // might be empty in case of no host
+ const char *origin_host_cstr = origin_host.c_str();
+ int origin_host_len = origin_host.size(), url_host_len = url.host().size();
+
+ // lower-case version of origin and url hosts
+ const char *c_origin_host_lower =
+ strtolower(origin_host_cstr, origin_host_len, free2),
+ *c_url_host_lower =
+ strtolower(url.host().c_str(), url_host_len, free3);
+
+#ifdef ADBLOCK_LOG
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "[%s with host '%s'] [%s]",
+ c_url, url.host().c_str(), origin_host.c_str());
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "[%s with host '%s'] [%s]",
+ c_url, url.host().c_str(), origin_host_cstr);
+#endif
+
+ bool checked_fp = false, fp = false;
+ bool checked_fp = false, fp = false;
+
+ bool intercept = false;
+ for (int i = 0; i < ADBLOCK_ENTRY_COUNT; i++) {
+ adblock_entry *entry = &ADBLOCK_ENTRIES[i];
+ bool intercept = false;
+ for (int i = 0; i < ADBLOCK_ENTRY_COUNT; i++) {
+ adblock_entry *entry = &ADBLOCK_ENTRIES[i];
+
+ // no use checking rules when we're intercepting, or exceptions when not
+ bool check =
+ (!intercept && ((entry->flags & ADBLOCK_FLAG_EXCEPTION) == 0)) ||
+ (intercept && ((entry->flags & ADBLOCK_FLAG_EXCEPTION) != 0));
+ if (!check)
+ continue;
+ // no use checking rules when we're intercepting, or exceptions when not
+ bool check =
+ (!intercept && ((entry->flags & ADBLOCK_FLAG_EXCEPTION) == 0)) ||
+ (intercept && ((entry->flags & ADBLOCK_FLAG_EXCEPTION) != 0));
+ if (!check)
+ continue;
+
+ // first check for domain matches, a quick branch out if matching
+ if (!url_match_domain(entry, origin_host))
+ continue;
+ // check for resource type
+ if (!resource_type_match(entry, resource_type))
+ continue;
+
+ // check on the URL matcher
+ if (!url_matches(c_url, c_url_sep, c_url_lower, c_url_lower_sep, entry))
+ continue;
+ // check for domain matches, a quick branch out if not matching
+ if (!url_match_domain(entry, origin_host))
+ continue;
+
+ // finally check first/third-party
+ if (!url_match_party(entry, url, origin_host, checked_fp, fp))
+ continue;
+ // check on the URL matcher
+ if (!url_matches(c_url, c_url_sep, c_url_lower, c_url_lower_sep, entry))
+ continue;
+
+ // finally check first/third-party
+ if (!url_match_party(entry, c_origin_host_lower, origin_host_len,
+ c_url_host_lower, url_host_len, checked_fp, fp))
+ continue;
+
+#ifdef ADBLOCK_LOG
+ if (!intercept) {
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG,
+ "--> intercept (#%d: \"%s\") (%x)", i,
+ entry->matches[0], entry->flags);
+ } else {
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "--> pass (%d) (#%d)", i,
+ entry->flags);
+ }
+ if (!intercept) {
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG,
+ "--> intercept (#%d: \"%s\") (%x)", i,
+ entry->matches[0], entry->flags);
+ } else {
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "--> pass (%d) (#%d)", i,
+ entry->flags);
+ }
+#endif
+ intercept = !intercept;
+ } // for each entry
+ intercept = !intercept;
+ } // for each entry
+
+ free(c_url_sep);
+ if (free3)
+ free((void *)c_url_host_lower);
+ if (free2)
+ free((void *)c_origin_host_lower);
+ free(c_url_sep);
+ if (free1)
+ free(c_url_lower);
+ if (free4)
+ free(c_url_lower_sep);
+
+ if (intercept) {
+ if (intercept) {
+#ifdef ADBLOCK_LOG
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "blocked");
+#endif
+ return 1;
+ }
+#ifdef ADBLOCK_LOG
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "pass");
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "blocked");
+#endif
+ return 1;
+ }
+#ifdef ADBLOCK_LOG
+ __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "pass");
+#endif
+ return 0;
+}
+
@@ -668,7 +835,7 @@ diff --git a/net/url_request/adblock_intercept.h b/net/url_request/adblock_inter
new file mode 100644
--- /dev/null
+++ b/net/url_request/adblock_intercept.h
@@ -0,0 +1,41 @@
@@ -0,0 +1,35 @@
+/*
+ This file is part of Bromite.
+
@@ -689,11 +856,8 @@ new file mode 100644
+#ifndef NET_URL_REQUEST_ADBLOCK_INTERCEPT_H_
+#define NET_URL_REQUEST_ADBLOCK_INTERCEPT_H_
+
+#include "url/gurl.h"
+
+#ifndef ADB_TESTER
+#include "content/public/common/resource_type.h"
+#endif
+#include "url/gurl.h"
+
+namespace net {
+
@@ -701,11 +865,8 @@ new file mode 100644
+int adblock_rules_count();
+#endif
+
+int adblock_intercept(const GURL &url, const std::string &origin_host
+#ifndef ADB_TESTER
+, content::ResourceType resource_type
+#endif
+);
+int adblock_intercept(const GURL &url, const std::string &origin_host,
+ content::ResourceType resource_type);
+
+} // namespace net
+
@@ -36,7 +36,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNu
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
--- a/chrome/browser/android/chrome_feature_list.cc
+++ b/chrome/browser/android/chrome_feature_list.cc
@@ -350,7 +350,7 @@ const base::Feature kIntentBlockExternalFormRedirectsNoGesture{
@@ -351,7 +351,7 @@ const base::Feature kIntentBlockExternalFormRedirectsNoGesture{
base::FEATURE_ENABLED_BY_DEFAULT};
const base::Feature kJellyBeanSupported{"JellyBeanSupported",
@@ -0,0 +1,91 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Wed, 20 Feb 2019 21:41:26 +0100
Subject: Disable metrics collection for NTP tiles
---
.../android/ntp/most_visited_sites_bridge.cc | 21 ---------------------
components/ntp_tiles/BUILD.gn | 3 ---
2 files changed, 24 deletions(-)
diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/browser/android/ntp/most_visited_sites_bridge.cc
--- a/chrome/browser/android/ntp/most_visited_sites_bridge.cc
+++ b/chrome/browser/android/ntp/most_visited_sites_bridge.cc
@@ -25,7 +25,6 @@
#include "chrome/browser/thumbnails/thumbnail_list_source.h"
#include "components/favicon_base/favicon_types.h"
#include "components/history/core/browser/history_service.h"
-#include "components/ntp_tiles/metrics.h"
#include "components/ntp_tiles/most_visited_sites.h"
#include "components/ntp_tiles/section_type.h"
#include "components/rappor/rappor_service_impl.h"
@@ -47,7 +46,6 @@ using ntp_tiles::NTPTilesVector;
using ntp_tiles::SectionType;
using ntp_tiles::TileTitleSource;
using ntp_tiles::TileSource;
-using ntp_tiles::TileVisualType;
namespace {
@@ -252,7 +250,6 @@ void MostVisitedSitesBridge::RecordPageImpression(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
jint jtiles_count) {
- ntp_tiles::metrics::RecordPageImpression(jtiles_count);
}
void MostVisitedSitesBridge::RecordTileImpression(
@@ -265,18 +262,6 @@ void MostVisitedSitesBridge::RecordTileImpression(
jint jsource,
jlong jdata_generation_time_ms,
const JavaParamRef<jstring>& jurl) {
- GURL url(ConvertJavaStringToUTF8(env, jurl));
- TileTitleSource title_source = static_cast<TileTitleSource>(jtitle_source);
- TileSource source = static_cast<TileSource>(jsource);
- TileVisualType visual_type = static_cast<TileVisualType>(jvisual_type);
- favicon_base::IconType icon_type =
- static_cast<favicon_base::IconType>(jicon_type);
-
- ntp_tiles::metrics::RecordTileImpression(
- ntp_tiles::NTPTileImpression(
- jindex, source, title_source, visual_type, icon_type,
- base::Time::FromJavaTime(jdata_generation_time_ms), url),
- g_browser_process->rappor_service());
}
void MostVisitedSitesBridge::RecordOpenedMostVisitedItem(
@@ -287,12 +272,6 @@ void MostVisitedSitesBridge::RecordOpenedMostVisitedItem(
jint title_source,
jint source,
jlong jdata_generation_time_ms) {
- ntp_tiles::metrics::RecordTileClick(ntp_tiles::NTPTileImpression(
- index, static_cast<TileSource>(source),
- static_cast<TileTitleSource>(title_source),
- static_cast<TileVisualType>(tile_type), favicon_base::IconType::kInvalid,
- base::Time::FromJavaTime(jdata_generation_time_ms),
- /*url_for_rappor=*/GURL()));
}
static jlong JNI_MostVisitedSitesBridge_Init(
diff --git a/components/ntp_tiles/BUILD.gn b/components/ntp_tiles/BUILD.gn
--- a/components/ntp_tiles/BUILD.gn
+++ b/components/ntp_tiles/BUILD.gn
@@ -20,8 +20,6 @@ static_library("ntp_tiles") {
"icon_cacher.h",
"icon_cacher_impl.cc",
"icon_cacher_impl.h",
- "metrics.cc",
- "metrics.h",
"most_visited_sites.cc",
"most_visited_sites.h",
"ntp_tile.cc",
@@ -91,7 +89,6 @@ source_set("unit_tests") {
"custom_links_manager_impl_unittest.cc",
"custom_links_store_unittest.cc",
"icon_cacher_impl_unittest.cc",
- "metrics_unittest.cc",
"most_visited_sites_unittest.cc",
"popular_sites_impl_unittest.cc",
]
--
2.11.0
@@ -2,10 +2,55 @@ From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Sat, 10 Nov 2018 19:47:39 +0100
Subject: Do not grant notifications to default search engine
Block gelocation by default instead of granting it for non-enterprise use cases (almost the totality of users)
---
chrome/common/chrome_features.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
.../search_permissions/search_permissions_service.cc | 18 +++++-------------
chrome/common/chrome_features.cc | 2 +-
2 files changed, 6 insertions(+), 14 deletions(-)
diff --git a/chrome/browser/android/search_permissions/search_permissions_service.cc b/chrome/browser/android/search_permissions/search_permissions_service.cc
--- a/chrome/browser/android/search_permissions/search_permissions_service.cc
+++ b/chrome/browser/android/search_permissions/search_permissions_service.cc
@@ -343,11 +343,7 @@ void SearchPermissionsService::InitializeSettingsIfNeeded() {
return;
}
- // If we get to here, the DSE is not disabled by enterprise policy. If it was
- // previously enterprise controlled, we initialize the setting to BLOCK since
- // we don't know what the user's setting was previously.
- bool was_enterprise_controlled =
- pref_service_->GetBoolean(prefs::kDSEWasDisabledByPolicy);
+ // If we get to here, the DSE is not disabled by enterprise policy.
pref_service_->ClearPref(prefs::kDSEWasDisabledByPolicy);
// Initialize the pref for geolocation if it hasn't been initialized yet.
@@ -380,10 +376,8 @@ void SearchPermissionsService::InitializeSettingsIfNeeded() {
pref_service_->ClearPref(prefs::kDSEGeolocationSettingDeprecated);
} else if (dse_geolocation_setting == CONTENT_SETTING_ASK) {
// If the user hasn't explicitly allowed or blocked geolocation for the
- // DSE, initialize it to allowed.
- dse_geolocation_setting = was_enterprise_controlled
- ? CONTENT_SETTING_BLOCK
- : CONTENT_SETTING_ALLOW;
+ // DSE, initialize it to disallowed.
+ dse_geolocation_setting = CONTENT_SETTING_BLOCK;
}
// Update the content setting with the auto-grants for the DSE.
@@ -409,11 +403,9 @@ void SearchPermissionsService::InitializeSettingsIfNeeded() {
GetContentSetting(dse_origin, CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
ContentSetting dse_notifications_setting = notifications_setting_to_restore;
// If the user hasn't explicitly allowed or blocked notifications for the
- // DSE, initialize it to allowed.
+ // DSE, initialize it to disallowed.
if (dse_notifications_setting == CONTENT_SETTING_ASK) {
- dse_notifications_setting = was_enterprise_controlled
- ? CONTENT_SETTING_BLOCK
- : CONTENT_SETTING_ALLOW;
+ dse_notifications_setting = CONTENT_SETTING_BLOCK;
}
// Update the content setting with the auto-grants for the DSE.
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -36,7 +36,7 @@ diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/brows
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -1055,7 +1055,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
@@ -1058,7 +1058,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
void ChromeContentBrowserClient::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) {
registry->RegisterBooleanPref(prefs::kDisable3DAPIs, false);
@@ -1,118 +0,0 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Sat, 10 Nov 2018 16:09:26 +0100
Subject: Reduce permissions needed for bookmarks import/export
Completely remove contacts picker permission from the file dialog
---
chrome/android/java/AndroidManifest.xml | 1 -
chrome/browser/android/bookmarks/bookmark_bridge.cc | 20 +++++++++++++++++---
.../src/org/chromium/ui/base/SelectFileDialog.java | 12 ++++++++----
3 files changed, 25 insertions(+), 8 deletions(-)
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -35,7 +35,6 @@ by a child template that "extends" this file.
{% endif %}
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN"/>
- <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
<uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
<uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browser/android/bookmarks/bookmark_bridge.cc
--- a/chrome/browser/android/bookmarks/bookmark_bridge.cc
+++ b/chrome/browser/android/bookmarks/bookmark_bridge.cc
@@ -552,14 +552,23 @@ void BookmarkBridge::ImportBookmarks(JNIEnv* env,
select_file_dialog_ = ui::SelectFileDialog::Create(
this, std::make_unique<ChromeSelectFilePolicy>(nullptr));
- //NOTE: extension and description are not used on Android
+ //NOTE: extension and description are not used on Android, thus not set
ui::SelectFileDialog::FileTypeInfo file_type_info;
+
+#if defined(OS_ANDROID)
+ static const std::vector<base::string16> v_accept_types = { base::UTF8ToUTF16("text/html") };
+
+ // Android needs the original MIME types and an additional capture value.
+ std::pair<std::vector<base::string16>, bool> accept_types =
+ std::make_pair(v_accept_types, /* use_media_capture */ false);
+#else
file_type_info.extensions.resize(1);
file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("html"));
file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("htm"));
file_type_info.extension_description_overrides.push_back(base::ASCIIToUTF16("Netscape Bookmark"));
file_type_info.allowed_paths =
- ui::SelectFileDialog::FileTypeInfo::NATIVE_OR_DRIVE_PATH;
+ ui::SelectFileDialog::FileTypeInfo::ANY_PATH;
+#endif
select_file_dialog_->SelectFile(
ui::SelectFileDialog::SELECT_OPEN_FILE,
@@ -569,7 +578,12 @@ void BookmarkBridge::ImportBookmarks(JNIEnv* env,
0,
base::FilePath::StringType(),
window,
- NULL);
+#if defined(OS_ANDROID)
+ &accept_types
+#else
+ NULL
+#endif
+);
//NOTE: this should be called after the actual import
Java_BookmarkBridge_bookmarksImported(env, obj);
diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
--- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
+++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
@@ -52,6 +52,7 @@ public class SelectFileDialog
private static final String IMAGE_TYPE = "image/";
private static final String VIDEO_TYPE = "video/";
private static final String AUDIO_TYPE = "audio/";
+ private static final String HTML_TYPE = "text/html";
private static final String ALL_IMAGE_TYPES = IMAGE_TYPE + "*";
private static final String ALL_VIDEO_TYPES = VIDEO_TYPE + "*";
private static final String ALL_AUDIO_TYPES = AUDIO_TYPE + "*";
@@ -159,7 +160,7 @@ public class SelectFileDialog
if (!window.hasPermission(Manifest.permission.READ_CONTACTS)) {
missingPermissions.add(Manifest.permission.READ_CONTACTS);
}
- } else if (shouldUsePhotoPicker()) {
+ } else if (shouldUsePhotoPicker() || shouldShowHtmlTypes()) {
if (!window.hasPermission(Manifest.permission.READ_EXTERNAL_STORAGE)) {
missingPermissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
@@ -324,9 +325,7 @@ public class SelectFileDialog
* 3.) There is a valid Android Activity associated with the file request.
*/
private boolean shouldUseContactsPicker() {
- if (mFileTypes.size() != 1) return false;
- if (!mFileTypes.get(0).equals("text/json+contacts")) return false;
- return UiUtils.shouldShowContactsPicker() && mWindowAndroid.getActivity().get() != null;
+ return false;
}
/**
@@ -347,6 +346,7 @@ public class SelectFileDialog
}
if (!mimeTypes.contains(mimeType)) mimeTypes.add(mimeType);
}
+ if (mimeTypes.size() == 0) return null;
return mimeTypes;
}
@@ -649,6 +649,10 @@ public class SelectFileDialog
return countAcceptTypesFor(specificType) > 0;
}
+ private boolean shouldShowHtmlTypes() {
+ return countAcceptTypesFor(HTML_TYPE) > 0;
+ }
+
private boolean shouldShowImageTypes() {
return shouldShowTypes(ALL_IMAGE_TYPES, IMAGE_TYPE);
}
--
2.11.0
+1 -1
View File
@@ -56,7 +56,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcu
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
@@ -1405,7 +1405,7 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
@@ -1410,7 +1410,7 @@ public class CustomTabActivity extends ChromeActivity<CustomTabActivityComponent
public boolean onMenuOrKeyboardAction(int id, boolean fromMenu) {
// Disable creating new tabs, bookmark, history, print, help, focus_url, etc.
if (id == R.id.focus_url_bar || id == R.id.all_bookmarks_menu_id
@@ -0,0 +1,401 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Tue, 29 Jan 2019 01:02:07 +0100
Subject: Rollback android:minSdkVersion from 19 (KitKat) to 16 (JellyBean)
This reverts commit 9a48587dbd1988cf5066b454e7d09ae35d124366.
---
.../test/embedded_test_server/java/AndroidManifest.xml | 2 +-
android_webview/tools/automated_ui_tests/java/AndroidManifest.xml | 2 +-
base/android/jni_generator/AndroidManifest.xml | 2 +-
build/android/AndroidManifest.xml | 2 +-
build/android/gradle/android.jinja | 2 +-
chrome/android/BUILD.gn | 8 ++++----
chrome/android/java/res/layout/autofill_local_card_editor.xml | 4 ++--
.../test/android/chrome_public_test_support/AndroidManifest.xml | 2 +-
components/cronet/android/sample/AndroidManifest.xml | 3 +--
components/cronet/android/sample/javatests/AndroidManifest.xml | 3 +--
components/cronet/android/test/javaperftests/AndroidManifest.xml | 3 +--
components/cronet/android/test/javatests/AndroidManifest.xml | 3 +--
.../test/android/browsertests_apk/AndroidManifest.xml.jinja2 | 2 +-
content/shell/android/browsertests_apk/AndroidManifest.xml.jinja2 | 2 +-
content/shell/android/javatests/AndroidManifest.xml | 2 +-
content/shell/android/linker_test_apk/AndroidManifest.xml.jinja2 | 2 +-
content/shell/android/shell_apk/AndroidManifest.xml.jinja2 | 2 +-
docs/android_build_instructions.md | 2 +-
mojo/public/java/system/javatests/AndroidManifest.xml | 2 +-
net/android/unittest_support/AndroidManifest.xml | 2 +-
net/test/android/javatests/AndroidManifest.xml | 2 +-
remoting/android/java/AndroidManifest.xml.jinja2 | 2 +-
remoting/android/javatests/AndroidManifest.xml.jinja2 | 2 +-
testing/android/driver/java/AndroidManifest.xml | 2 +-
testing/android/native_test/java/AndroidManifest.xml.jinja2 | 2 +-
tools/android/audio_focus_grabber/java/AndroidManifest.xml | 2 +-
tools/android/push_apps_to_background/AndroidManifest.xml | 2 +-
27 files changed, 31 insertions(+), 35 deletions(-)
diff --git a/android_webview/test/embedded_test_server/java/AndroidManifest.xml b/android_webview/test/embedded_test_server/java/AndroidManifest.xml
--- a/android_webview/test/embedded_test_server/java/AndroidManifest.xml
+++ b/android_webview/test/embedded_test_server/java/AndroidManifest.xml
@@ -8,7 +8,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="org.chromium.android_webview.test.support">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
diff --git a/android_webview/tools/automated_ui_tests/java/AndroidManifest.xml b/android_webview/tools/automated_ui_tests/java/AndroidManifest.xml
--- a/android_webview/tools/automated_ui_tests/java/AndroidManifest.xml
+++ b/android_webview/tools/automated_ui_tests/java/AndroidManifest.xml
@@ -10,7 +10,7 @@
android:versionCode="1"
android:versionName="1.0" >
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
diff --git a/base/android/jni_generator/AndroidManifest.xml b/base/android/jni_generator/AndroidManifest.xml
--- a/base/android/jni_generator/AndroidManifest.xml
+++ b/base/android/jni_generator/AndroidManifest.xml
@@ -7,7 +7,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.jni.generator">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="24" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="24" />
<application></application>
</manifest>
diff --git a/build/android/AndroidManifest.xml b/build/android/AndroidManifest.xml
--- a/build/android/AndroidManifest.xml
+++ b/build/android/AndroidManifest.xml
@@ -15,6 +15,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.dummy">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="24" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="24" />
</manifest>
diff --git a/build/android/gradle/android.jinja b/build/android/gradle/android.jinja
--- a/build/android/gradle/android.jinja
+++ b/build/android/gradle/android.jinja
@@ -52,7 +52,7 @@ android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
- minSdkVersion 19
+ minSdkVersion 16
targetSdkVersion {{ target_sdk_version }}
}
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -63,7 +63,7 @@ jinja_template("chrome_public_android_manifest") {
output = chrome_public_android_manifest
variables = chrome_public_jinja_variables
variables += [
- "min_sdk_version=19",
+ "min_sdk_version=16",
"target_sdk_version=$android_sdk_version",
]
}
@@ -1459,7 +1459,7 @@ template("chrome_public_apk_or_module_tmpl") {
android_manifest = chrome_modern_public_android_manifest
android_manifest_dep = ":chrome_modern_public_android_manifest"
} else {
- min_sdk_version = 19
+ min_sdk_version = 16
android_manifest = chrome_public_android_manifest
android_manifest_dep = ":chrome_public_android_manifest"
}
@@ -1663,7 +1663,7 @@ jinja_template("chrome_public_test_apk_manifest") {
variables = default_chrome_public_jinja_variables
variables += [
"manifest_package=$test_manifest_package",
- "min_sdk_version=19",
+ "min_sdk_version=16",
"target_sdk_version=$android_sdk_version",
]
}
@@ -1674,7 +1674,7 @@ jinja_template("chrome_public_test_vr_apk_manifest") {
output = chrome_public_test_vr_apk_manifest
variables = chrome_public_jinja_variables
variables += [
- "min_sdk_version=19",
+ "min_sdk_version=16",
"target_sdk_version=$android_sdk_version",
]
}
diff --git a/chrome/android/java/res/layout/autofill_local_card_editor.xml b/chrome/android/java/res/layout/autofill_local_card_editor.xml
--- a/chrome/android/java/res/layout/autofill_local_card_editor.xml
+++ b/chrome/android/java/res/layout/autofill_local_card_editor.xml
@@ -19,7 +19,7 @@
<!-- TODO(crbug.com/900912): Fix and remove lint ignore -->
<EditText
- tools:ignore="Autofill,LabelFor"
+ tools:ignore="Autofill"
android:id="@+id/credit_card_name_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -40,7 +40,7 @@
<!-- TODO(crbug.com/900912): Fix and remove lint ignore -->
<EditText
- tools:ignore="Autofill,LabelFor"
+ tools:ignore="Autofill"
android:id="@+id/credit_card_number_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/chrome/test/android/chrome_public_test_support/AndroidManifest.xml b/chrome/test/android/chrome_public_test_support/AndroidManifest.xml
--- a/chrome/test/android/chrome_public_test_support/AndroidManifest.xml
+++ b/chrome/test/android/chrome_public_test_support/AndroidManifest.xml
@@ -5,7 +5,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.chromium.chrome.tests.support">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="22" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="22" />
<uses-permission android:name="android.permission.INTERNET" />
<application>
<service android:name="org.chromium.chrome.browser.media.TestMediaRouteProviderService"
diff --git a/components/cronet/android/sample/AndroidManifest.xml b/components/cronet/android/sample/AndroidManifest.xml
--- a/components/cronet/android/sample/AndroidManifest.xml
+++ b/components/cronet/android/sample/AndroidManifest.xml
@@ -9,8 +9,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.cronet_sample_apk">
- <!-- //components/cronet still needs to support Jelly Bean. See crbug.com/922656 -->
- <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application android:name="CronetSampleApplication"
diff --git a/components/cronet/android/sample/javatests/AndroidManifest.xml b/components/cronet/android/sample/javatests/AndroidManifest.xml
--- a/components/cronet/android/sample/javatests/AndroidManifest.xml
+++ b/components/cronet/android/sample/javatests/AndroidManifest.xml
@@ -8,8 +8,7 @@
doesn't ignore this. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.cronet_sample_apk.tests">
- <!-- //components/cronet still needs to support Jelly Bean. See crbug.com/922656 -->
- <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />
<!-- We add an application tag here just so that we can indicate that this
package needs to link against the android.test library, which is
diff --git a/components/cronet/android/test/javaperftests/AndroidManifest.xml b/components/cronet/android/test/javaperftests/AndroidManifest.xml
--- a/components/cronet/android/test/javaperftests/AndroidManifest.xml
+++ b/components/cronet/android/test/javaperftests/AndroidManifest.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.net">
- <!-- //components/cronet still needs to support Jelly Bean. See crbug.com/922656 -->
- <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
diff --git a/components/cronet/android/test/javatests/AndroidManifest.xml b/components/cronet/android/test/javatests/AndroidManifest.xml
--- a/components/cronet/android/test/javatests/AndroidManifest.xml
+++ b/components/cronet/android/test/javatests/AndroidManifest.xml
@@ -8,8 +8,7 @@
doesn't ignore this. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.net.tests">
- <!-- //components/cronet still needs to support Jelly Bean. See crbug.com/922656 -->
- <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="24" />
+ <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />
<!-- We add an application tag here just so that we can indicate that this
package needs to link against the android.test library, which is
diff --git a/components/test/android/browsertests_apk/AndroidManifest.xml.jinja2 b/components/test/android/browsertests_apk/AndroidManifest.xml.jinja2
--- a/components/test/android/browsertests_apk/AndroidManifest.xml.jinja2
+++ b/components/test/android/browsertests_apk/AndroidManifest.xml.jinja2
@@ -9,7 +9,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.components_browsertests_apk">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA" />
diff --git a/content/shell/android/browsertests_apk/AndroidManifest.xml.jinja2 b/content/shell/android/browsertests_apk/AndroidManifest.xml.jinja2
--- a/content/shell/android/browsertests_apk/AndroidManifest.xml.jinja2
+++ b/content/shell/android/browsertests_apk/AndroidManifest.xml.jinja2
@@ -9,7 +9,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.content_browsertests_apk">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA" />
diff --git a/content/shell/android/javatests/AndroidManifest.xml b/content/shell/android/javatests/AndroidManifest.xml
--- a/content/shell/android/javatests/AndroidManifest.xml
+++ b/content/shell/android/javatests/AndroidManifest.xml
@@ -6,7 +6,7 @@
doesn't ignore this. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.content_shell_apk.tests">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />
<!-- We add an application tag here just so that we can indicate that this
package needs to link against the android.test library, which is
diff --git a/content/shell/android/linker_test_apk/AndroidManifest.xml.jinja2 b/content/shell/android/linker_test_apk/AndroidManifest.xml.jinja2
--- a/content/shell/android/linker_test_apk/AndroidManifest.xml.jinja2
+++ b/content/shell/android/linker_test_apk/AndroidManifest.xml.jinja2
@@ -9,7 +9,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.chromium_linker_test_apk">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA" />
diff --git a/content/shell/android/shell_apk/AndroidManifest.xml.jinja2 b/content/shell/android/shell_apk/AndroidManifest.xml.jinja2
--- a/content/shell/android/shell_apk/AndroidManifest.xml.jinja2
+++ b/content/shell/android/shell_apk/AndroidManifest.xml.jinja2
@@ -9,7 +9,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.content_shell_apk">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA"/>
diff --git a/docs/android_build_instructions.md b/docs/android_build_instructions.md
--- a/docs/android_build_instructions.md
+++ b/docs/android_build_instructions.md
@@ -162,7 +162,7 @@ the version of Android running on a device. Chrome uses this feature to target
3 different versions using 3 different ninja targets:
1. `chrome_public_apk` (ChromePublic.apk)
- * `minSdkVersion=19` (KitKat).
+ * `minSdkVersion=16` (Jelly Bean).
* Stores libchrome.so compressed within the APK.
* Uses [Crazy Linker](https://cs.chromium.org/chromium/src/base/android/linker/BUILD.gn?rcl=6bb29391a86f2be58c626170156cbfaa2cbc5c91&l=9).
* Shipped only for Android < 21, but still works fine on Android >= 21.
diff --git a/mojo/public/java/system/javatests/AndroidManifest.xml b/mojo/public/java/system/javatests/AndroidManifest.xml
--- a/mojo/public/java/system/javatests/AndroidManifest.xml
+++ b/mojo/public/java/system/javatests/AndroidManifest.xml
@@ -8,7 +8,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="org.chromium.mojo.tests">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="21" />
+ <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.INJECT_EVENTS"
tools:ignore="ProtectedPermissions"/>
diff --git a/net/android/unittest_support/AndroidManifest.xml b/net/android/unittest_support/AndroidManifest.xml
--- a/net/android/unittest_support/AndroidManifest.xml
+++ b/net/android/unittest_support/AndroidManifest.xml
@@ -10,7 +10,7 @@ found in the LICENSE file.
android:versionCode="1"
android:versionName="1.0">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>
diff --git a/net/test/android/javatests/AndroidManifest.xml b/net/test/android/javatests/AndroidManifest.xml
--- a/net/test/android/javatests/AndroidManifest.xml
+++ b/net/test/android/javatests/AndroidManifest.xml
@@ -8,7 +8,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="org.chromium.net.test.support">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
diff --git a/remoting/android/java/AndroidManifest.xml.jinja2 b/remoting/android/java/AndroidManifest.xml.jinja2
--- a/remoting/android/java/AndroidManifest.xml.jinja2
+++ b/remoting/android/java/AndroidManifest.xml.jinja2
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="{{ APK_PACKAGE_NAME }}">
- <uses-sdk android:minSdkVersion="19"
+ <uses-sdk android:minSdkVersion="14"
android:targetSdkVersion="28"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
diff --git a/remoting/android/javatests/AndroidManifest.xml.jinja2 b/remoting/android/javatests/AndroidManifest.xml.jinja2
--- a/remoting/android/javatests/AndroidManifest.xml.jinja2
+++ b/remoting/android/javatests/AndroidManifest.xml.jinja2
@@ -11,7 +11,7 @@
<!-- We add an application tag here just so that we can indicate that this
package needs to link against the android.test library, which is
needed when building test cases. -->
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />
<application>
<uses-library android:name="android.test.runner" />
diff --git a/testing/android/driver/java/AndroidManifest.xml b/testing/android/driver/java/AndroidManifest.xml
--- a/testing/android/driver/java/AndroidManifest.xml
+++ b/testing/android/driver/java/AndroidManifest.xml
@@ -10,7 +10,7 @@ found in the LICENSE file.
android:versionCode="1"
android:versionName="1.0">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application android:label="OnDeviceInstrumentationDriver" />
diff --git a/testing/android/native_test/java/AndroidManifest.xml.jinja2 b/testing/android/native_test/java/AndroidManifest.xml.jinja2
--- a/testing/android/native_test/java/AndroidManifest.xml.jinja2
+++ b/testing/android/native_test/java/AndroidManifest.xml.jinja2
@@ -10,7 +10,7 @@ found in the LICENSE file.
android:versionCode="1"
android:versionName="1.0">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
diff --git a/tools/android/audio_focus_grabber/java/AndroidManifest.xml b/tools/android/audio_focus_grabber/java/AndroidManifest.xml
--- a/tools/android/audio_focus_grabber/java/AndroidManifest.xml
+++ b/tools/android/audio_focus_grabber/java/AndroidManifest.xml
@@ -8,7 +8,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.tools.audio_focus_grabber" >
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<application
android:label="@string/app_name" >
diff --git a/tools/android/push_apps_to_background/AndroidManifest.xml b/tools/android/push_apps_to_background/AndroidManifest.xml
--- a/tools/android/push_apps_to_background/AndroidManifest.xml
+++ b/tools/android/push_apps_to_background/AndroidManifest.xml
@@ -10,7 +10,7 @@
android:versionCode="1"
android:versionName="1.0" >
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" />
<application
android:icon="@drawable/ic_launcher"
--
2.11.0
@@ -0,0 +1,110 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Wed, 21 Feb 2018 00:32:09 +0100
Subject: Use 4 tile rows, never show logo
---
.../java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java | 6 +++---
.../chromium/chrome/browser/suggestions/MostVisitedSitesBridge.java | 2 +-
.../src/org/chromium/chrome/browser/suggestions/SiteSection.java | 2 +-
components/history/core/browser/top_sites_impl.cc | 2 +-
components/history/core/browser/top_sites_impl.h | 4 ++--
components/ntp_snippets/bookmarks/bookmark_suggestions_provider.cc | 2 +-
6 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
@@ -117,7 +117,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
/** Observer for overview mode. */
private EmptyOverviewModeObserver mOverviewObserver;
- private boolean mSearchProviderHasLogo = true;
+ private boolean mSearchProviderHasLogo = false;
private boolean mSearchProviderIsGoogle;
private boolean mInitialized;
@@ -548,7 +548,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
&& mInitialized) {
return;
}
- mSearchProviderHasLogo = hasLogo;
+ mSearchProviderHasLogo = false;
mSearchProviderIsGoogle = isGoogle;
updateTileGridPadding();
@@ -831,7 +831,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer
}
private static int getMaxTileRows() {
- return 2;
+ return 4;
}
/**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/MostVisitedSitesBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/MostVisitedSitesBridge.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/MostVisitedSitesBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/MostVisitedSitesBridge.java
@@ -27,7 +27,7 @@ public class MostVisitedSitesBridge
* Maximum number of tiles that is explicitly supported. UMA relies on this value, so even if
* the UI supports it, getting more can raise unexpected issues.
*/
- public static final int MAX_TILE_COUNT = 12;
+ public static final int MAX_TILE_COUNT = 12 * 2;
private long mNativeMostVisitedSitesBridge;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SiteSection.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SiteSection.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SiteSection.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SiteSection.java
@@ -110,7 +110,7 @@ public class SiteSection extends OptionalLeaf implements TileGroup.Observer {
if (ChromeFeatureList.isEnabled(ChromeFeatureList.EXPLORE_SITES)) {
return 1;
}
- return 2;
+ return 4;
}
@LayoutRes
diff --git a/components/history/core/browser/top_sites_impl.cc b/components/history/core/browser/top_sites_impl.cc
--- a/components/history/core/browser/top_sites_impl.cc
+++ b/components/history/core/browser/top_sites_impl.cc
@@ -83,7 +83,7 @@ bool DoTitlesDiffer(const MostVisitedURLList& old_list,
// Max number of temporary images we'll cache. See comment above
// temp_images_ for details.
-const size_t kMaxTempTopImages = 8;
+const size_t kMaxTempTopImages = 8 * 2;
// The delay for the first HistoryService query at startup.
constexpr base::TimeDelta kFirstDelayAtStartup =
diff --git a/components/history/core/browser/top_sites_impl.h b/components/history/core/browser/top_sites_impl.h
--- a/components/history/core/browser/top_sites_impl.h
+++ b/components/history/core/browser/top_sites_impl.h
@@ -60,10 +60,10 @@ class TopSitesImpl : public TopSites, public HistoryServiceObserver {
using CanAddURLToHistoryFn = base::Callback<bool(const GURL&)>;
// How many non-forced top sites to store in the cache.
- static constexpr size_t kNonForcedTopSitesNumber = 10;
+ static constexpr size_t kNonForcedTopSitesNumber = 4 * 4 + 2;
// How many forced top sites to store in the cache.
- static constexpr size_t kForcedTopSitesNumber = 10;
+ static constexpr size_t kForcedTopSitesNumber = 4 * 4 + 2;
TopSitesImpl(PrefService* pref_service,
HistoryService* history_service,
diff --git a/components/ntp_snippets/bookmarks/bookmark_suggestions_provider.cc b/components/ntp_snippets/bookmarks/bookmark_suggestions_provider.cc
--- a/components/ntp_snippets/bookmarks/bookmark_suggestions_provider.cc
+++ b/components/ntp_snippets/bookmarks/bookmark_suggestions_provider.cc
@@ -30,7 +30,7 @@ namespace ntp_snippets {
namespace {
-const int kMaxBookmarks = 10;
+const int kMaxBookmarks = 4 * 4 + 2;
const int kMaxBookmarkAgeInDays = 7;
const char* kMaxBookmarksParamName = "bookmarks_max_count";
--
2.11.0
@@ -215,7 +215,7 @@ diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -830,30 +830,6 @@ void SetApplicationLocaleOnIOThread(const std::string& locale) {
@@ -833,30 +833,6 @@ void SetApplicationLocaleOnIOThread(const std::string& locale) {
GetIOThreadApplicationLocale() = locale;
}
@@ -246,7 +246,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
#if defined(OS_ANDROID)
float GetDeviceScaleAdjustment() {
static const float kMinFSM = 1.05f;
@@ -2004,7 +1980,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
@@ -2007,7 +1983,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
// Disable client-side phishing detection in the renderer if it is
// disabled in the Profile preferences or the browser process.
if (!prefs->GetBoolean(prefs::kSafeBrowsingEnabled) ||
@@ -255,7 +255,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
command_line->AppendSwitch(
switches::kDisableClientSidePhishingDetection);
}
@@ -2694,7 +2670,7 @@ void ChromeContentBrowserClient::AllowCertificateError(
@@ -2697,7 +2673,7 @@ void ChromeContentBrowserClient::AllowCertificateError(
SSLErrorHandler::HandleSSLError(
web_contents, cert_error, ssl_info, request_url,
expired_previous_decision,
@@ -264,7 +264,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
callback, SSLErrorHandler::BlockingPageReadyCallback());
}
@@ -2974,8 +2950,6 @@ bool ChromeContentBrowserClient::CanCreateWindow(
@@ -2977,8 +2953,6 @@ bool ChromeContentBrowserClient::CanCreateWindow(
void ChromeContentBrowserClient::ResourceDispatcherHostCreated() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
@@ -273,7 +273,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
for (size_t i = 0; i < extra_parts_.size(); ++i)
extra_parts_[i]->ResourceDispatcherHostCreated();
@@ -4181,7 +4155,7 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
@@ -4201,7 +4175,7 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation(
if (base::FeatureList::IsEnabled(features::kSSLCommittedInterstitials)) {
throttles.push_back(std::make_unique<SSLErrorNavigationThrottle>(
handle,
+6 -2
View File
@@ -52,6 +52,7 @@ Fix-crash-when-accessing-page-info-site-settings.patch
openH264-enable-ARM-ARM64-optimizations.patch
Switch-to-fstack-protector-strong.patch
Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch
AV1-codec-support.patch
Inject-scripts-for-AMP-tracking-ads-and-video-functionality.patch
Allow-playing-audio-in-background.patch
Add-flag-to-control-video-playback-resume-feature.patch
@@ -75,8 +76,7 @@ Add-custom-tab-intents-privacy-option.patch
Add-site-settings-option-for-session-only-cookies.patch
Always-allow-partner-customisation.patch
Change-default-homepage-to-new-tab-page.patch
Add-bookmark-import-export-actions-in-bookmarks-activity-and-page.patch
Reduce-permissions-needed-for-bookmarks-import-export.patch
Add-bookmark-import-export-actions.patch
Disable-promos-displayed-in-bookmarks-manager.patch
Add-option-to-not-persist-tabs-across-sessions.patch
Add-an-always-incognito-mode.patch
@@ -107,3 +107,7 @@ Add-flag-to-disable-IPv6-probes.patch
Add-a-proxy-configuration-page.patch
Do-not-ignore-download-location-prompt-setting.patch
Disable-previews-by-default.patch
Rollback-android-minSdkVersion-from-19-KitKat-to-16-JellyBean.patch
Add-flag-to-show-hide-NTP-tiles.patch
Use-4-tile-rows-never-show-logo.patch
Disable-metrics-collection-for-NTP-tiles.patch