aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2013-11-27 10:08:15 -0800
committerTor Norbye <tnorbye@google.com>2013-11-27 10:15:17 -0800
commit00682c3649085c6f381c19e134cee226ee6f2a48 (patch)
treeb75fd4a867a5e47597ab70d8538764440434ee77 /eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2
parentc0079867566b790408f32e9854df3a5a44dc1fb0 (diff)
downloadsdk-00682c3649085c6f381c19e134cee226ee6f2a48.tar.gz
Pass credentials to render sandbox
Change-Id: I330c944ab6712b36cc62c046e955c6a00f0496a4
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java40
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PreviewIconFactory.java2
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderLogger.java13
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderPreview.java2
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderService.java48
5 files changed, 82 insertions, 23 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java
index 4bfca1d27..327279b12 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GraphicalEditorPart.java
@@ -288,6 +288,7 @@ public class GraphicalEditorPart extends EditorPart
private FlyoutControlComposite mPaletteComposite;
private PropertyFactory mPropertyFactory;
private boolean mRenderedOnce;
+ private final Object mCredential = new Object();
/**
* Flags which tracks whether this editor is currently active which is set whenever
@@ -1527,11 +1528,43 @@ public class GraphicalEditorPart extends EditorPart
return true;
}
+ /**
+ * Creates a {@link RenderService} associated with this editor
+ * @return the render service
+ */
+ @NonNull
+ public RenderService createRenderService() {
+ return RenderService.create(this, mCredential);
+ }
+
+ /**
+ * Creates a {@link RenderLogger} associated with this editor
+ * @param name the name of the logger
+ * @return the new logger
+ */
+ @NonNull
+ public RenderLogger createRenderLogger(String name) {
+ return new RenderLogger(name, mCredential);
+ }
+
+ /**
+ * Creates a {@link RenderService} associated with this editor
+ *
+ * @param configuration the configuration to use (and fallback to editor for the rest)
+ * @param resolver a resource resolver to use to look up resources
+ * @return the render service
+ */
+ @NonNull
+ public RenderService createRenderService(Configuration configuration,
+ ResourceResolver resolver) {
+ return RenderService.create(this, configuration, resolver, mCredential);
+ }
+
private void renderWithBridge(IProject iProject, UiDocumentNode model,
LayoutLibrary layoutLib) {
LayoutCanvas canvas = getCanvasControl();
Set<UiElementNode> explodeNodes = canvas.getNodesToExplode();
- RenderLogger logger = new RenderLogger(mEditedFile.getName());
+ RenderLogger logger = createRenderLogger(mEditedFile.getName());
RenderingMode renderingMode = RenderingMode.NORMAL;
// FIXME set the rendering mode using ViewRule or something.
List<UiElementNode> children = model.getUiChildren();
@@ -1540,7 +1573,7 @@ public class GraphicalEditorPart extends EditorPart
renderingMode = RenderingMode.V_SCROLL;
}
- RenderSession session = RenderService.create(this)
+ RenderSession session = RenderService.create(this, mCredential)
.setModel(model)
.setLog(logger)
.setRenderingMode(renderingMode)
@@ -1653,7 +1686,8 @@ public class GraphicalEditorPart extends EditorPart
ResourceManager resManager = ResourceManager.getInstance();
IProject project = getProject();
ProjectResources projectRes = resManager.getProjectResources(project);
- mProjectCallback = new ProjectCallback(layoutLibrary, projectRes, project);
+ mProjectCallback = new ProjectCallback(layoutLibrary, projectRes, project,
+ mCredential);
} else if (reset) {
// Also clears the set of missing/broken classes prior to rendering
mProjectCallback.getMissingClasses().clear();
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PreviewIconFactory.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PreviewIconFactory.java
index c92ce815f..5661b2919 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PreviewIconFactory.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/PreviewIconFactory.java
@@ -267,7 +267,7 @@ public class PreviewIconFactory {
.setModel(model)
.setOverrideRenderSize(width, height)
.setRenderingMode(RenderingMode.FULL_EXPAND)
- .setLog(new RenderLogger("palette"))
+ .setLog(editor.createRenderLogger("palette"))
.setOverrideBgColor(overrideBgColor)
.setDecorations(false)
.createRenderSession();
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderLogger.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderLogger.java
index c0d997f78..8548830bd 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderLogger.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderLogger.java
@@ -44,10 +44,12 @@ public class RenderLogger extends LayoutLog {
private List<String> mTags;
private List<Throwable> mTraces;
private static Set<String> sIgnoredFidelityWarnings;
+ private final Object mCredential;
/** Construct a logger for the given named layout */
- RenderLogger(String name) {
+ RenderLogger(String name, Object credential) {
mName = name;
+ mCredential = credential;
}
/**
@@ -311,10 +313,7 @@ public class RenderLogger extends LayoutLog {
// Append the given message to the ADT log. Bypass the sandbox if necessary
// such that we can write to the log file.
private void appendToIdeLog(Throwable throwable, int severity, String description) {
- RenderSecurityManager renderSecurityManager = RenderSecurityManager.getCurrent();
- if (renderSecurityManager != null) {
- renderSecurityManager.setActive(false);
- }
+ boolean token = RenderSecurityManager.enterSafeRegion(mCredential);
try {
if (throwable != null) {
AdtPlugin.log(throwable, "%1$s: %2$s", mName, description);
@@ -322,9 +321,7 @@ public class RenderLogger extends LayoutLog {
AdtPlugin.log(severity, "%1$s: %2$s", mName, description);
}
} finally {
- if (renderSecurityManager != null) {
- renderSecurityManager.setActive(true);
- }
+ RenderSecurityManager.exitSafeRegion(token);
}
}
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderPreview.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderPreview.java
index 07baaeb21..5621d5f17 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderPreview.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderPreview.java
@@ -555,7 +555,7 @@ public class RenderPreview implements IJobChangeListener {
} else {
renderService.setModel(editor.getModel());
}
- RenderLogger log = new RenderLogger(getDisplayName());
+ RenderLogger log = editor.createRenderLogger(getDisplayName());
renderService.setLog(log);
RenderSession session = renderService.createRenderSession();
Result render = session.render(1000);
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderService.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderService.java
index 53bd096d8..c274d3c23 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderService.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/RenderService.java
@@ -108,10 +108,12 @@ public class RenderService {
private Integer mOverrideBgColor;
private boolean mShowDecorations = true;
private Set<UiElementNode> mExpandNodes = Collections.<UiElementNode>emptySet();
+ private final Object mCredential;
/** Use the {@link #create} factory instead */
- private RenderService(GraphicalEditorPart editor) {
+ private RenderService(GraphicalEditorPart editor, Object credential) {
mEditor = editor;
+ mCredential = credential;
mProject = editor.getProject();
LayoutCanvas canvas = editor.getCanvasControl();
@@ -135,8 +137,10 @@ public class RenderService {
}
private RenderService(GraphicalEditorPart editor,
- Configuration configuration, ResourceResolver resourceResolver) {
+ Configuration configuration, ResourceResolver resourceResolver,
+ Object credential) {
mEditor = editor;
+ mCredential = credential;
mProject = editor.getProject();
LayoutCanvas canvas = editor.getCanvasControl();
@@ -206,9 +210,20 @@ public class RenderService {
* @return a {@link RenderService} which can perform rendering services
*/
public static RenderService create(GraphicalEditorPart editor) {
- RenderService renderService = new RenderService(editor);
+ // Delegate to editor such that it can pass its credential to the service
+ return editor.createRenderService();
+ }
- return renderService;
+ /**
+ * Creates a new {@link RenderService} associated with the given editor.
+ *
+ * @param editor the editor to provide configuration data such as the render target
+ * @param credential the sandbox credential
+ * @return a {@link RenderService} which can perform rendering services
+ */
+ @NonNull
+ public static RenderService create(GraphicalEditorPart editor, Object credential) {
+ return new RenderService(editor, credential);
}
/**
@@ -221,9 +236,22 @@ public class RenderService {
*/
public static RenderService create(GraphicalEditorPart editor,
Configuration configuration, ResourceResolver resolver) {
- RenderService renderService = new RenderService(editor, configuration, resolver);
+ // Delegate to editor such that it can pass its credential to the service
+ return editor.createRenderService(configuration, resolver);
+ }
- return renderService;
+ /**
+ * Creates a new {@link RenderService} associated with the given editor.
+ *
+ * @param editor the editor to provide configuration data such as the render target
+ * @param configuration the configuration to use (and fallback to editor for the rest)
+ * @param resolver a resource resolver to use to look up resources
+ * @param credential the sandbox credential
+ * @return a {@link RenderService} which can perform rendering services
+ */
+ public static RenderService create(GraphicalEditorPart editor,
+ Configuration configuration, ResourceResolver resolver, Object credential) {
+ return new RenderService(editor, configuration, resolver, credential);
}
/**
@@ -471,7 +499,7 @@ public class RenderService {
mProjectCallback.setResourceResolver(mResourceResolver);
RenderSecurityManager securityManager = createSecurityManager();
try {
- securityManager.setActive(true);
+ securityManager.setActive(true, mCredential);
synchronized (RENDERING_LOCK) {
return mLayoutLib.createSession(params);
}
@@ -480,7 +508,7 @@ public class RenderService {
mLogger.error(null, t.getLocalizedMessage(), t, null);
throw t;
} finally {
- securityManager.dispose();
+ securityManager.dispose(mCredential);
mProjectCallback.setLogger(null);
mProjectCallback.setResourceResolver(null);
}
@@ -584,7 +612,7 @@ public class RenderService {
mProjectCallback.setResourceResolver(mResourceResolver);
RenderSecurityManager securityManager = createSecurityManager();
try {
- securityManager.setActive(true);
+ securityManager.setActive(true, mCredential);
synchronized (RENDERING_LOCK) {
session = mLayoutLib.createSession(params);
}
@@ -610,7 +638,7 @@ public class RenderService {
mLogger.error(null, t.getLocalizedMessage(), t, null);
throw t;
} finally {
- securityManager.dispose();
+ securityManager.dispose(mCredential);
mProjectCallback.setLogger(null);
mProjectCallback.setResourceResolver(null);
if (session != null) {