Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
| index 6956113e5c7d4c63faca6ccd06cad64b9222d345..2b1ab6f563119bf6c5466c8d8beed6d0063385bf 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
| @@ -240,6 +240,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
| // Chrome delegate that includes functionalities needed by Blimp client. |
| private ChromeBlimpClientContextDelegate mBlimpClientContextDelegate; |
| + // Skips capturing screenshot for testing purpose. |
| + private boolean mScreenshotCaptureSkippedForTesting; |
| + |
| /** |
| * @param The {@link AppMenuHandlerFactory} for creating {@link mAppMenuHandler} |
| */ |
| @@ -993,6 +996,11 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
| return super.onOptionsItemSelected(item); |
| } |
| + @VisibleForTesting |
| + public void setScreenshotCaptureSkippedForTesting(boolean value) { |
| + mScreenshotCaptureSkippedForTesting = value; |
| + } |
| + |
| /** |
| * Triggered when the share menu item is selected. |
| * This creates and shows a share intent picker dialog or starts a share intent directly. |
| @@ -1000,6 +1008,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
| * recently used to share. |
| * @param isIncognito Whether currentTab is incognito. |
| */ |
| + @VisibleForTesting |
| public void onShareMenuItemSelected(final boolean shareDirectly, final boolean isIncognito) { |
| final Tab currentTab = getActivityTab(); |
| if (currentTab == null) return; |
| @@ -1022,34 +1031,41 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
| private void triggerShare( |
| final Tab currentTab, final boolean shareDirectly, boolean isIncognito) { |
| final Activity mainActivity = this; |
| + WebContents webContents = currentTab.getWebContents(); |
| + |
| + boolean isOfflinePage = currentTab.isOfflinePage(); |
| + RecordHistogram.recordBooleanHistogram("OfflinePages.SharedPageWasOffline", isOfflinePage); |
| + boolean canShareOfflinePage = OfflinePageBridge.isPageSharingEnabled(); |
| + |
| + // Share an empty blockingUri in place of screenshot file. The file ready notification is |
| + // sent by onScreenshotReady call below when the file is written. |
| + final Uri blockingUri = (isIncognito || webContents == null) |
| + ? null |
| + : ChromeFileProvider.generateUriAndBlockAccess(mainActivity); |
| + if (canShareOfflinePage) { |
| + OfflinePageUtils.shareOfflinePage(shareDirectly, true, mainActivity, null, |
| + currentTab.getUrl(), blockingUri, null, currentTab, isOfflinePage); |
| + } else { |
| + ShareHelper.share(shareDirectly, true, mainActivity, currentTab.getTitle(), null, |
| + currentTab.getUrl(), null, blockingUri, null); |
| + if (shareDirectly) { |
| + RecordUserAction.record("MobileMenuDirectShare"); |
| + } else { |
| + RecordUserAction.record("MobileMenuShare"); |
| + } |
| + } |
| + |
|
Ted C
2016/09/07 00:30:07
I think you want to do
if (blockingUri == null) r
ssid
2016/09/07 00:51:23
Done.
|
| + // Start screenshot capture and notify the provider when it is ready. |
| ContentBitmapCallback callback = new ContentBitmapCallback() { |
| @Override |
| public void onFinishGetBitmap(Bitmap bitmap, int response) { |
| - boolean isOfflinePage = currentTab.isOfflinePage(); |
| - RecordHistogram.recordBooleanHistogram( |
| - "OfflinePages.SharedPageWasOffline", isOfflinePage); |
| - boolean canShareOfflinePage = OfflinePageBridge.isPageSharingEnabled(); |
| - |
| - if (canShareOfflinePage) { |
| - // Share the offline page instead of the URL. |
| - OfflinePageUtils.shareOfflinePage(shareDirectly, true, mainActivity, null, |
| - currentTab.getUrl(), bitmap, null, currentTab, isOfflinePage); |
| - } else { |
| - ShareHelper.share(shareDirectly, true, mainActivity, currentTab.getTitle(), |
| - null, currentTab.getUrl(), null, bitmap, null); |
| - if (shareDirectly) { |
| - RecordUserAction.record("MobileMenuDirectShare"); |
| - } else { |
| - RecordUserAction.record("MobileMenuShare"); |
| - } |
| - } |
| + ShareHelper.onScreenshotReady(blockingUri, bitmap, mainActivity); |
| } |
| }; |
| - if (isIncognito || currentTab.getWebContents() == null) { |
| - callback.onFinishGetBitmap(null, ReadbackResponse.SURFACE_UNAVAILABLE); |
| + if (!mScreenshotCaptureSkippedForTesting) { |
| + webContents.getContentBitmapAsync(Bitmap.Config.ARGB_8888, 1.f, EMPTY_RECT, callback); |
| } else { |
| - currentTab.getWebContents().getContentBitmapAsync( |
| - Bitmap.Config.ARGB_8888, 1.f, EMPTY_RECT, callback); |
| + callback.onFinishGetBitmap(null, ReadbackResponse.SURFACE_UNAVAILABLE); |
| } |
| } |