Commit c10e2b60 authored by Filip Gorski's avatar Filip Gorski Committed by Commit Bot

[SRO][Clipboard] Prevent SecurityException on SRO

Prevents exceptions when setting URL in clipboard.

Bug: 1115825
Change-Id: If64623659d042f1949f22ad759fbf26aaf55531c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2355012
Commit-Queue: Filip Gorski <fgorski@chromium.org>
Commit-Queue: Ted Choc <tedchoc@chromium.org>
Auto-Submit: Filip Gorski <fgorski@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#798229}
parent b1445cb6
......@@ -327,12 +327,14 @@ public class Clipboard implements ClipboardManager.OnPrimaryClipChangedListener
setPrimaryClipNoException(ClipData.newPlainText(null, null));
}
public void setPrimaryClipNoException(ClipData clip) {
private boolean setPrimaryClipNoException(ClipData clip) {
try {
mClipboardManager.setPrimaryClip(clip);
return true;
} catch (Exception ex) {
// Ignore any exceptions here as certain devices have bugs and will fail.
showCopyToClipboardFailureMessage();
return false;
}
}
......@@ -374,8 +376,9 @@ public class Clipboard implements ClipboardManager.OnPrimaryClipChangedListener
*/
public void copyUrlToClipboard(String url) {
ClipData clip = ClipData.newPlainText("url", url);
mClipboardManager.setPrimaryClip(clip);
Toast.makeText(mContext, R.string.link_copied, Toast.LENGTH_SHORT).show();
if (setPrimaryClipNoException(clip)) {
Toast.makeText(mContext, R.string.link_copied, Toast.LENGTH_SHORT).show();
}
}
/**
......
......@@ -7,8 +7,12 @@ package org.chromium.ui.base;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.verify;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.net.Uri;
import android.text.SpannableString;
......@@ -16,6 +20,8 @@ import android.text.style.RelativeSizeSpan;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.robolectric.annotation.Config;
import org.chromium.base.ContentUriUtils;
......@@ -98,4 +104,35 @@ public class ClipboardTest {
assertEquals(imageUri, clipboard.getImageUri());
}
@Test
public void testClipboardCopyUrlToClipboard() {
Clipboard clipboard = Clipboard.getInstance();
ClipboardManager clipboardManager = Mockito.mock(ClipboardManager.class);
clipboard.overrideClipboardManagerForTesting(clipboardManager);
String url = "https://google.com";
clipboard.copyUrlToClipboard(url);
ArgumentCaptor<ClipData> clipCaptor = ArgumentCaptor.forClass(ClipData.class);
verify(clipboardManager).setPrimaryClip(clipCaptor.capture());
assertEquals("url", clipCaptor.getValue().getDescription().getLabel());
assertEquals(url, clipCaptor.getValue().getItemAt(0).getText());
}
@Test
public void testClipboardCopyUrlToClipboardNoException() {
Clipboard clipboard = Clipboard.getInstance();
ClipboardManager clipboardManager = Mockito.mock(ClipboardManager.class);
clipboard.overrideClipboardManagerForTesting(clipboardManager);
doThrow(SecurityException.class).when(clipboardManager).setPrimaryClip(any(ClipData.class));
String url = "https://google.com";
clipboard.copyUrlToClipboard(url);
ArgumentCaptor<ClipData> clipCaptor = ArgumentCaptor.forClass(ClipData.class);
verify(clipboardManager).setPrimaryClip(clipCaptor.capture());
assertEquals("url", clipCaptor.getValue().getDescription().getLabel());
assertEquals(url, clipCaptor.getValue().getItemAt(0).getText());
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment